DataProvider Overhaul

Overhauled the DataProvider abstract class to bring it in line with the way world loading/unloading works now.

Rather than having special faculties for handling chunks or columns, the data provider will now have a binary store in addition to its key/value store, settings store, log store, and chat log store.  From this binary store raw binary objects can be retrieved based on a string key.

This will not only permit no copy saving/loading of columns, but it will also allow the world format to be dynamic, without updating/changing the abstract DataProvider class, which is the goal of a highly modular design.

Also rewrote the MySQLDataProvider class (again), switching away from the old worker thread model and better organizing the code.

This rework did break compatibility on the GetValues function (which interacts with the key/value store).  This function previously returned a vector of nullable strings, but this didn't make sense as it was impossible for the strings in the key/value store to be null (as the interface for adding key/value pairs does not take nullable strings).

Fresh documentation for the DataProvider class, and changes to the callers of the GetValues function to come soon.