Initial commit.  Basic functionality works, but probably needs to be
sped up.