Some events will originate outside the map viewport such as keyboard
events which originate with the element specified by keyboardEventTarget
which could be document.body
The `target` Event property is readonly as it is set internally when an
event is dispatched. This change uses a plain object with the essential
properties that a PointerEvent has which is sufficent for map event handling
As discussed in https://github.com/openlayers/openlayers/issues/6948#issuecomment-565375694
The check to see if the target is within the "page" uses the viewport as
the MapBrowserEventHandler instance adds it's listeners to the viewport.
Using Node.contains appears to have a slight performance benefit
over manually walking the DOM.
In order to allow a user to select content within an element with the `.ol-selectable` class the `user-select` CSS property should be `text`.
The current value of `auto` results in a computed value of `none` due to the rule `.ol-viewport, .ol-unselectable` specifying `user-select: none`. According to the [the specification](https://www.w3.org/TR/css-ui-4/#valdef-user-select-auto):
> if the computed value of `user-select` on the parent of this element is `none`, the computed value is `none`
Tested manually on Chromium, Firefox and IE11.