Refactor Future abstraction: define an abstract future and make executor specific future impls in there package
Update tests: fix tests to cope with Future impl changes