Implement 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.
Fixed various player disconnect problems

Previously players who joined the server and were disconnected for various
reasons, such as not being on the active whitelist, would get potentially
strange disconnect reasons and would have left a leave message in chat for
other players to see.

In order to not send the leave message to online players and to avoid
strange reasons on the client-side, the 'online' state of the player is
tracked through use of a boolean variable in their session. The session
tracks the logical 'online' state of the player for use in sending
appropriate messages to both the client and the other online players.

This commit additionally fixes an API compatibility problem where in
PlayerLoginEvent, the player's online state was reported as true when it
should be false for a first-time login.
Implement explosions and some flint & steel behaviour

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 ensuring the block is flamable before igniting it.
Implement basic block physics

This commit includes the ability for the server to demonstrate basic block
physics as described below. This provides a base for many other future
commits for things like neighbor updates and other missed physics cases.

This commit adds the following physics cases:
- Falling blocks (sand, gravel, anvil, and dragon egg)
- Tower blocks (cacti and sugar cane)
- Attached blocks (carpet, dead bushes, fire, melon stem, pumpkin stem,
  snow, tall grass, and torch (redstone & otherwise))