Core Data Library
 * Remove some legacy code for the singleton that is only applicable to very old versions of iOS.
 * Add performBlock and performBlockAndWait wrappers to the Core Data manager. This is in preparation for multithreading the contexts.
 * Cleaned up the layout of the Core Data library and broke the code up into logical blocks defined by #pragma mark
 * Only attempt to return a ubiquityIdentityToken if running iOS 7 AND if URLForUbiquityContainerIdentifier is valid. This addresses a crash on iOS 8 simulator when iCloud Drive is not enabled. (actual devices are fine).
 * Resetting of the core data interfaces prior to bringing the store online should be done on the context's thread.
 * Store loading post migration should be done on the context's thread.
 * The notifications (storeWillChangeNotification, storeDidChangeNotification and storeDidImportUbiquitousContentChangesNotification) now always run on the main thread.

Training System
 * Add two new methods (flagAsShown and flagAsNotShown) that take a list of screen names to either flag as shown or not shown.
 * Add support for elements that do not have a highlight. Elements that are not highlighted cannot have a description.
 * Added tracking (internal to the overlay data) the unique identifier of the overlay.
 * Added support for null ([NSNull null] not nil) elements. These will have a colour and description but will not highlight an area.
 * Added support for UISegmentedControl. Segmented control elements are defined by providing the segmented control and the index of the segment to highlight. e.g.. @[self.viewSelector, @(0)] would reference the first element of the viewSelector segmented control.