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.
Nitpick: I would prefer that we keep static strings either stored off somewhere as variables or consistently make them lowercase.  Unless we're testing for flexible inputs, we should stick with consistent styling.