Generally improve Unicode support

This changes the editor to represent lines as `String`s. It’s possible that this will have to change in the future if we want to support reading non-UTF-8 files, but I think this is a good fix for now at least.

It also changes the representation of keys to be either a character or a ‘special’ key that doesn’t represent a character. This means that all characters should now be typeable.

Fixes #19.
Fixes #17.
Do you think it would be worth adding a doc comment here to indicate why you would use this method instead of setting the offset `+= 1` directly? I'm guessing its cos some chars can be longer than 1?