Implement more text objects (for quotes and brackets)

This allows one to use things like `ci"` to change in quotes and `ci(` to change in brackets.  Like Vim, it works across lines and understands escaped quotes and nested brackets.

It could perhaps be more elegant - I wasn't 100% on the APIs for selecting stuff, but at least it seems to work alright.