selection: ensure that `this.range` is defined

In `getContaining()` and `placeMarkers()` functions.

Prevents uncaught errors as described in #204.
I'm not sure if you should be able to create a selection object when there is no range.

In fact, I think it is confusing how we've created our selection object. It confuses the selection and the range. Most of the helper functions on the selection object perform operations on the range, not on the selection. I would like to move to a world where we have separate selection and range wrapper objects, and you can't create a range object if there is no range – mimicking the native selection and range APIs, e.g. `window.getSelection.getRangeAt(0)` will throw if there is no range.

Or, preferably, a future where we just have [helper functions](https://github.com/guardian/scribe-common/blob/master/src/element.js) (e.g. `getContaining(range, nodeFilter)`) for the native selection and range objects, instead of wrapper objects.