feat(markers): extract marker display in a view

Each marker display is now handled by the `MarkerView`. The
`MarkerView` can now register to the marker events and update its
position as soon as it changed.
fix(styles): prevents markers appearing over the selection