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.
> Would it be easier to have HoverData be null?
Not necessarily. We would then have to define a special case when the user calls `getCurrentlyHovered`.

`data.length` is not necessary equal to `selection[0].length`; consider the case where we highlight a number of nearby points on a line, but there's only one selection. In particular, `selection.data()` is not guaranteed to equal `data` (consider the line case again).