Added Interaction.Hover.

Interaction.Hover acts on any Component that has implemented the
Hoverable interface, which allows the Interaction.Hover to query
the Hoverable for data given a cursor position.

Added a hoverMode() call to AbstractBarPlot, which will allow
Interaction.Hover to replace the Interaction.BarHover.
However, what happens if this interaction is being done programatically?  I can easily see a HACKHACK in extended code where they need to "move" the cursor just to call a callback with the different HoverMode.

Again, I'm not too concerned about this edge case, but we should definitely have awareness of the issue.