Implement proper bonemeal behaviour

This PR is still in progress of being completed. Please do not merge yet.

This PR adds the Plant class and the Fertilisable class to allow bonemeal behaviour to be modular and editable from a single class. Plant and fertilisable classes then extend this class.

The classes use the abstract keyword, as mentioned in #2159.

Child classes are used to simplify the action of checking and incrementing the number of bonemeals applied. The same method for calculating the process should be used for all Fertilisables, unless the child class overrides the method for customisation which they are perfectly allowed to do so with OOP method overriding.. All the child classes/blocks have to do is to define how many fertilisers(bonemeals) they need to fertilise, and define their own fertlise function to customise how they will behave upon being fertlised - as that behaviour is different to each block.

Again, This PR is still in progress of being completed. Please do not merge yet. It still needs to undergo testing and bug fixing.