Initial upload

There's actually a slightly further along version somewhere on my
ThinkPad, but this will do for now, I'll submit the other changes later.