Separate Map Handling from Collections

Extracting all map logic and annotation from collections because
each of these have different needs and trying to use the same
structure for both is not sufficiently flexible.

This involves:
- new MapProperty annotation
- new MapProperty class to represent destination properties which are maps
- MapFieldProperty and MapMethodProperty subclasses to handle fields and methods
- Extracting logic from CollectionTranslator and putting it in new MapTranslator
- Extracting logic from CollectionTranslation tests and putting it in new MapTranslation tests.

This commit does not add new functionality to Moo, simply prepares the way for new functionality to be added.

Related to #37.