Implement predetermined pooling and better GC management.

Summary:
This implements predetermined pooling, automatic saving of chunks after generation and loading chunks in a seperate thread (to prevent lag when the game starts).

There is also the infrastructure for purging chunks back out to disk, but as of yet I don't have an efficient way of doing this.  Basically to prevent GC gen 2 collections we need to free chunks from memory so that we don't keep increasing in memory usage as the player explores.

Even this probably won't entirely eliminate GC gen 2 generations.  Further profiling will be required to eliminate these.

Test Plan: Run the game, there should be less lag spikes / GC collections.

Reviewers: Sabre070

Reviewed By: Sabre070

CC: buildbot

Maniphest Tasks: T112

Differential Revision: http://code.redpointsoftware.com.au/D98