Unordered: Merge from trunk.
Remove some workarounds for old compilers, some documentation updates and tweak some tests for problem compilers.