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.
Might be easier to maintain if for each BlockType, have a field specifying the sound, and reference that field here, instead of having to override sound methods like this.