Replace with futures and promises for syncing
Replace reference with std::reference_wrapper because STL elements
need to be Assignable in g++-4.6 and vanilla references aren't.
Implement move assignment in addition to move ctor for g++-4.6
12.04 fix to compile on 13.10