Improvements to aged_containers (RIPD-363)

- Added unit tests for element erase
- Added unit tests for range erase
- Extended unit tests for touch
- Added unit tests for iterators and reverse_iterators
- Un-inlined operator== for unordered containers
- Fixed minor problems with ordered_container erase()
- Made ordered_container...
  - erase (reverse_iterator pos) not compile
  - erase (reverse_iterator first, reverse_iterator last) not compile
  - touch (reverse iterator pos) not compile
- Verified that ordered container...
  - insert() already rejects reverse_iterator
  - emplace_hint() already rejects reverse_iterator
- Made set/multiset iterators const

Regarding the set/multiset iterators, see section 5.1 of
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2913.pdf
as pointed out by Vinnie.
This is just bikeshedding... 

>  Const things are deleted all the time when they go out of scope. 

That's not actually true - they are destroyed, but delete isn't called, because they're on the stack.

If I pass a const Foo* foo; to a routine, I expect foo to be unchanged, in exactly the same way that I'd be pretty unhappy if a const method called delete *this.

This is an argument for use of unique_ptr and the like - yes, I know it probably can't be done here.