Channel Reification: a Reflective Approach to Fault Tolerant Software Development