Commit initial batch of work.  Mostly working.  Needs more tests and docs.