Initial commit

Code structure is in place, but there's a bunch of functionality
missing and no unit tests.