Initial commit.

Needs serious cleanup and improvements, but I wanted to get it out so that we could collaborate.