Make Rotation.next() an instance method

Rotation.next(rotation)   vs   rotation.next()

It makes much more sense to have the rotation itself return the next
rotation.
Assign BO3s in structures to the correct chunk

Previously, BO3s were assigned to the chunk that would populate the
origin of the BO3 (the BO3 origin is the location of block 0,0,0).
However, if the origin is not actually at the center of the BO3 parts of
the object may extend to unloaded chunks, even if the BO3 is smaller
than 16 blocks.

This commit fixes the issue by calculating the actual dimensions of the
BO3, and using those to calculate the actual center of the BO3. The
dimensions of the BO3 are stored in a new BoundingBox class.

Fixes #309.