Mutability model for mapping objects

@joe-goullaud Medium-sized change

I implemented NSMutableCopying on the mapping objects to fix an issue with "remembering" failed key mapping lookups. The data importer keeps a cache of immutable mapping objects, which keep a cache of inferred key-property mappings, including those that failed to be inferred. This speeds things up quite a bit when you're importing a lot of the same type of object, as it no longer bothers to try to import attributes that don't have a valid mapping.

Anyone who wishes to modify the mappings for particular scenarios can create a mutable copy, modify it, and pass it to the import method.