Refactor:

Refactored to pull out some of the complexity inherent in the
previous model. Migrated storage into an internally tracked
object that can be commited to local storage via the save
method.