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.
Will need to read the rest of the declaration, but is there a good reason why not to extend Legend / can we wrap this class into the existing legend with a isVertical variable for switching