Implemented sponge block functionality.

Dry sponges absorb water that can be found within a 7 block taxicab
distance. Due to the specific implementation, a taxicab block iterator has
been added to help assist in the more complex calculation of which blocks
to absorb. The iterator has been designed for reusability.
Implemented explosions and some flint & steel behavior.

This commit adds the basics for explosions as well as the ability to
ignite TNT through the use of flint and steel. Flint and steel
implementation has been kept to a minimum to keep this commit as related
to explosions as possible. Some flint and steel behaviour still needs to
be implemented, such as only igniting flammable blocks.
Keep track of entity IDs across worlds (fixes #486 and #447).

Keeping an entity ID registry globally rather than for each world allows
entities to retain their IDs when they teleport between worlds. Entities
now do not change their ID between being created and being removed.
Print and use correct port after binding (fixes #571).

Previously GlowServer#getPort() would return the wrong port if the server
was instructed to bind to port 0 (any available port). This commit
resolves that issue by storing the port that the server actually bound to
and returning that. The bound port is also printed to the log.
Add IBlockGrowable interface
Add ItemDye
Add BlockCocoa
Add BlockPlant
Add BlockCrops
Add BlockDoublePlant
Add BlockGrass
Add BlockMushroom
Add BlockSapling
Add BlockStem, remove BlockMelonStem and BlockPumpkinStem
Modify BlockTallGrass
Make random a protected static field of BlockType
Remove BlockPlant as it's not required here
Fix equality checks
Fill BlockMushroom and BlockSapling grow() method
Merge content of #434