Hook for filling glass bottles, equivalent to FillBucketEvent

add FillFluidContainerEvent as a base class for all container-specific fill events

FillBucketEvent extends FillFluidContainerEvent

introduce FillGlassBottleEvent, to be emitted when a glass bottle is
filled by the player from a fluid source block

ItemGlassBottle emits FillGlassBottleEvent upon fill attempt

Move javadocs on event handler methods to class-level

factor out inventory logic to a method on the event; not really the
role of the event, but this is a convenient way for us to reduce code
duplication and shrink patches

Shrink ItemGlassBottle patch by using FillFluidContainerEvent.fillContainer()

Shrink ItemBucket patch using the ItemGlassBottle approach

readd fields to FillBucketEvent to avoid breaking ABI; leads to
undesirable field hiding but such is the nature of public fields

hiding the non-final 'result' field is problematic; abstract via accessors

rename fillContainer => giveFilledContaner; better name?

Revert "Shrink ItemBucket patch using the ItemGlassBottle approach"

This reverts commit 6e14c67d6a1b9f4c089fa7895ebfc13bdbe9c605.

Revert "Shrink ItemGlassBottle patch by using FillFluidContainerEvent.fillContainer()"

This reverts commit f0e7f4efd559c1d7f25a6b3b9fd932d0220a857b.

Remove giveFilledContainer() method

condense ItemBucket and ItemGlassBottle patches
For maintaining binary compatibility for code compiled against the old FillBucketEvent, we had to hide the super class fields, i.e., fields of the same name are in both FillBucketEvent and FillFluidContainerEvent, and they need to be set separately. We could clean this up during the move to 1.8.