Added call to LightningStrikeEvent.
Handle target blocks gracefully (fixes #172).

Sometimes, player.getTargetBlock() throws an IllegalStateException. This
is usually the case if players stand at height 127 and look up when
left-clicking. The exception can be safely caught and treated as an
invalid block (air in this case).
Added block placement handling for buttons (see #119).

Moved setAttachable() for Buttons and Levers to BlockAttachable.
Added block placement handling for beds (see #119).

Handling of breaking beds not yet implemented.
Implement container blocks dropping their contents.

Fixes containers losing their contents and dropping incorrect blocks when
broken.
Handle status packets asynchronously.
start of tests

Signed-off-by: William Lebel <lebelwilliam@gmail.com>
Most of the LoginProtocol tested. Added equals / hashCode to those Login packets missing it.
Make BaseProtocolTest abstract so it isn't tested + cleanup.
Fixed JsonMessage equals. Added StatusProtocolTest.