Initial commit, builds.

Loads of work left to do, this isn't usable at this stage, but it
builds. Lots of refactoring/tidying up to do!