First version ready for feedback. Added all remaining functionality, and successfully ran initial tests.