User traits class for itemtype instead of template function.
Use template class Collection instead of TagList, ...

TagList, NodeList, RelationMemberList were basically the same.
Refactor collection code (part 1)

Found common code in iterators for TagsList, NodesList, and RelationMembersList
and put it into new CollectionIterator class template.
Refactor collection code (part 2)

Move operator++ out into parent iterator class, add next() method to do the
actual work of it in the class we are iterating over.
Improve WayNode encapsulation
Improved Tag class
Refactor collection code (part 3)

Finally we can remove all the special collection iterator classes, because the
code is now totally generic and all in the CollectionIterator template class.
Rename Item -> TypedItem and other name cleanups.

New TypedItem is child class of new Item class.
Don't have those *Iter typedefs.

Use Collection::iterator instead.