Heavy rewrite of the Future and Promise classes. Restructured tests.