MD Settings: Display: Add snapping and collisions

Note: This does not correctly resolve children of dragged displays yet,
it just carries them along which can result in overlapping.

This also:
* Moves the layout code into a separate behavior
* Uses Map instead of Object for bounds and layout maps
* Uses the id instead of the index when selecting a display (more robust)
* Fixes the calculateVisualScale behavior

BUG=547080
CQ_INCLUDE_TRYBOTS=tryserver.chromium.linux:closure_compilation

Review-Url: https://codereview.chromium.org/2097763004
Cr-Commit-Position: refs/heads/master@{#403500}
8 files changed