I've updated this:

* `moveCursor` now accepts an object, so I can pass the result of `findNext` directly to it
* `findNext` returns either `{row: …, col: …, found: true}` or `{found: false}`, never `null`