Implemented a FIFO to queue async save requests for YAML and MySQL.
The assumption is that most database objects will be held in memory
because the ordering of object loading is not handled. That means that
it is theoretically possible to load something on the main thread before
it has been saved in the async thread if you are really quick. So, in
general, you should load objects once and ideally never load them again
unless there's a big span of time in between so the async can finish.
For most situations, this race condition should not occur, but I'm just
warning about it.
Saving on shutdown is not async and takes as long as it takes.
Also added some defensive code to disable the plugin if the database
connection info is wrong and print an error message instead of lots of
errors.
Changed CleanSuperFlatListener to use a LinkedList for its queue.