Commiting functional test code prior to a refactor.
Refactored a little. This is where the book stops but I would probably refactor this further...
Added the first model. Will probably break the travis build.