Support document access strategy failover

Detect when scanning with the selected document access strategy fails,
and try to fall back to other strategies.

(This will allow using the Dummy strategy when d-t-m fails for some reason.)

Also, fix TextPosition strategy to avoid crashing without d-t-m.
Okay, CoffeeScript is nuts.

```
# I had assumed for all cases...
coffee> list = [1,2,3,4]
[ 1, 2, 3, 4 ]
coffee> list[1..1] = 'foo'
'foo'
coffee> list
[ 1, 'foo', 3, 4 ]

# In reality when assigning an array...
coffee> list = [1,2,3,4]
[ 1, 2, 3, 4 ]
coffee> list[1..1] = []
[]
coffee> list
[ 1, 3, 4 ]
```

In that case I'd rather we used the `[].splice` here.