Implement iterative Core Data model upgrades

Closes #2357 

ContextManager has been updated to use ALIterativeMigrator when the model in the persistent store doesn't match the current model version.  This allows us to create mapping models for a single version upgrade and devices installing app versions that skip upgrades will still get the mapping model applied.

Unit tested the migrations as well - I'm fairly certain this is a solid solution.  I had to rewrite how we're unit testing Core Data in the project.  ContextManager.sharedInstance is flawed since we're instantiating the app to run unit tests inside.  I'd like to further refactor this down the line but that's another unit of work.
Why not `self`? I'm not sure I understand this change