Fix problem with SpawnManager that occurs when Random does not have enough entropy.

This changes the spawn block finder algorithm in SpawnManager by
iterating through every block in the world, finding the ones that are
acceptible, and then randomly choosing one of those.

It also handles cases where there is no acceptible spawn block, in
which case a NoGoodSpawnPointsException is thrown. It travels up the
stack, and is caught by PrepareLocalWorld#step. PrepareLocalWorld#step
then throws a NeedToReinitStateLoading exception, which is caught by
StateLoading#update. StateLoading#update then re-initializes the
loading sequence, which then generates a new world that (hopefully) has
an acceptible spawn point.
Ensure the player can't bug the spawn point.

This ensures that the required number of air blocks are above the spawn
point on player respawn. Commit aeade7b ensures that the spawn block
itself is indestructible, so this along with aeade7b makes for a spawn
point that the player can't bug.