Large naming refactoring. Added some more tests.
Added some documentation. Changed data persistence structure. General naming changes. Updated tests appropriately.