Return highest non-air block to match API contract; Fixes BUKKIT-445

This removes direct usage of the nms.World.getHighestBlockYAt method
which returned the highest opaque block used for lighting purposes. It
now directly iterates each block downwards from the top to find the
first non-air block at the highest y value.
Implement consistent chunk access; Addresses BUKKIT-3897

No other methods in World load the chunk if it's not already.  This
commit brings the getHighestYAt method inline with the other similar
chunk accessing methods in World by returning data from the EmptyChunk
if the target chunk is not already loaded.