Refactor database updates

BOOM! This is the beginning of the long overdue refactor of the database interaction.

In each method's original implementation, it was responsible for not just communicating with the database directly, but also making sure the data was in the correct state both before and after that communication. This caused a few methods to become out of sync with the latest checks that to be performed.

With this change, all public methods will only flow through the `_update()` method. This new method will handle everything each of the public methods had to do previously.

Not only will this improve the public methods, but the test suite is now much more simple. The tests of the public methods are being moved in the `test_base` module. For these tests, they only need to test the various permutations of how they call `_update()`. The tests for `_update()` are going into the `test_database` module for the time being as it is best equipped to handle mocking the PyMongo methods.

Closes #4