Implement move assignment in addition to move ctor for g++-4.6

12.04 fix to compile on 13.10
Replace reference with std::reference_wrapper because STL elements
need to be Assignable in g++-4.6 and vanilla references aren't.