Unordered: Merge some of the older changes from trunk.
Code reorganization, simpler tests, better use of Boost.Move.