Refactor to support multiple persistence models

Significant refactor including

- Base class pattern with common interface, for supporting multiple persistence models
   - Core Data (implemented)
   - In-memory objects (TBD)
   - Other (TBD)

- DataImporter can handle relationships