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.
Streamline and clarify code.
Refactors; add <title> for better readability.
Factor size calculations out into a separate call.
Missing semicolon );
Use D3.Map instead of Javascript Object

Renamed a few things as well.
Merge pull request #872 from palantir/755-horizontal-legend

Add in HorizontalLegend.