DataManager, LocalDataSource & Associated stuff

I think that the DataManager & LocalDataSource stuff is working well enough that we can integrate it at least. Still needs more work, but the basic methods seem to be working correctly, if not in the most efficient way possible.
You shoudln't check isAvailable() here. Query the data manager and if it's not available, it won't add anything to the result. This is because calling isAvailable() on the network data manager doesn't actually check to see if it can presently talk to the server -- rather it shows whether the last query that was executed was able to talk to the server. So in this code if the datamanager ever goes unavailable, it won't come back.