Type mapping and substitution

Added a mechanism of mapping from one type to another to allow for type substitution. This allows for the explicit substitution of a generic class with a typed equivalent.
Closes #22