Refactored the data layer.

The data layer is now abstracted out into an "interface" layer (although, they are not actual Java Interfaces) and an implementation layer for specific database implementations. The only implementation packaged with the reference implementation will be MongoDB; however, one could use the MongoDB implementation to create any other implementation, e.g. MySQL.