Translator Caching and Refactoring

Added caching of object translator instances and pushed responsibility
for handing out instances of translators into a dedicated piece of
code, the CachingTranslatorFactory, as well as pushing the job of
creating SourceProperties from one of many SourcePropertyFactory
instances to a CompositeSourcePropertyFactory.

The resulting refactoring touches a fair number of Moo's core classes,
but I expect the API exposed to most users will not change much, as
I believe most of the chagnes are internal.

Closes #10.