Add in HorizontalLegend.

Lists entries side-by-side in the available width, after which the
entries wrap onto the next row. If an entry is too wide it is
truncated. If there are too many entries some rows will not be shown.

Close #755.
`desiredWidth` means how much space you want, which might be less than or equal to the available space. `HoverLegend` truncates things though, so it shouldn't ever be asking for more width anyway.