A Multiprocessor Kernel for Low Cost, User-Adaptable Fault-Tolerance