Add some new internal APIs to remap types.

* Import.cs (MetadataImporter):
  - Make `ImportType(TypeReference,ImportGenericContext)` virtual.
  - Make `ImportAssemblyName(AssemblyNameReference)' protected virtual.

* ModuleDefinition.cs:
  - Add new internal `ICustomMetadataWriter` interface.
  - Add `ModuleDefinition.SetMetadataImporter' to provide a custom
    importer (subclass of `MetadataImporter' which may use the new
    virtuals to override).
  - Add `ModuleDefinition.CustomMetadataWriter` property to provide
    a `ICustomMetadataWriter' to remap TypeRef tokens.

* AssemblyWriter.cs:
  - MetadataBuilder.GetTypeRefToken(): Use the new optional
    `ICustomMetadataWriter' to allow remapping of TypeReference,
    an implementation may choose to either replace TypeReference
    with a different one or provide a custom MetadataToken.

All the newly added APIs are internal and may change in future.
They are used in an internal Xamarin project, which patches the
build to add `[assembly: InternalsVisibleTo]'.