Initial commit. The bare bones work, but there's a lot to be done.