Models

PR for code review 

Just laying out the foundation. I think this is enough for now to start making some APIs. Responsibilities and more attributes will be pushed to the models as we go along.