Added new planar ChunkCoords class to differentiate from the 3D Coords
class
Change a bunch of chunk related methods to use new ChunkCoords class
instead of Coords - I believe this discrepancy was causing the main
chunk load problems
Force the plugin to load before the world loads by adding load: STARTUP
to plugin.yml - this allows us to capture ALL the chunk load events when
the server starts, otherwise it loads some chunks around spawn before
the plugin is loaded
The startup change means the world IDs get captured on the
WorldInitEvent handler instead of on plugin startup
Reduced the overall number of queries to fetch a chunk instance - during
a ChunkLoadEvent, the chunks collection was getting queried up to 5-6
times for the same object wasting a lot of time. I shuffled things
around to optimize this. The easiest change was checking for null after
a get() instead of calling contains() followed by a get()
Each PlantChunk instance now keeps track of its own planar chunk
coordinate, this was marked as TODO and simplified some method calls
Added a 2nd constructor to Coords class to take a Block parameter
Renamed some methods to be more descriptive
Removed a lot of unused imports
Changed the asynchronous chunk unloader to use a ConcurrentLinkedQueue
type instead of ArrayList type - much more efficient for what it was
doing
Wrapped the chunk cache map into its own small PlantChunks class