Created abstractions for resources and containers

Resources are abstractions for the files of the application, though
their use cases extend beyond files only. They are keyed, can be loaded,
read and written to.

Containers are store data in a way that can be easily retrieved. In this
way they are much like sets, They abstract out much of the data access
associated with repositories.