Add support for variable block sounds

This adds support for blocks to override the default placement sound with both variable volume and pitch. I created a new BlockSound class that encapsulates these values and can be overridden should a block need variable volume/pitch/sound etc. The pitch has a slight random deviation of +/- 0.25.
That could be useful. I believe the method in GlowSound should stay, though, since oftentimes we want to play a sound at a given location, and can just type `sound.play(location)` instead of having to get the world manually like `location.getWorld().playSound(location, sound)`. To play it to a single player there could be a `playToPlayer(Location, Player)`.