Better kill accumulation handling.

- Kill accumulation takes place across any consecutive kill fns, not just when
  the same kill fn is repeated.

- Factored isKillFn and isBackwardKill into methods that modes can override if
  they want to include other fns in accumulation handling without adhering to
  the naming conventions.
Nix Buffer.join(); other niggles.

We don't need join(), we just delete from EOL to EOL+1. That turns out to be
less fiddly and more robust anyway.
More key dispatch revampery.

I'm slowly grokking JavaFX key dispatch. It's still not ideal (I still can't
support e.g. C-_ directly) but it is looking less boneheaded. :)

Modified key presses (via alt, ctrl, shift) are translated by the OS into
alternate characters. In the case of ALT, that ends up being Greeky characters,
in the case of SHIFT, it's upper-case and shifted characters (natch), and in
the case of CTRL it's VT100 control characters (for example, CTRL-g is ASCII
7). The CTRL key map is a little wonky because not every keyboard key has a
control equivalent. So CTRL-= is just = (ASCII 61).

The still boneheaded thing is that if you use SHIFT in conjunction with any
other modifier key, it reverts to reporting the non-shifted character (e.g.
SHIFT-= gives + but CTRL-SHIFT-= gives =). This is non-awesome because I'd like
you to be able to bind C-+ directly without having to assume that the keyboard
in question has + above = and bind C-S-=. I need to file a JavaFX bug and see
what can be done.
CodeArea -> BufferArea; starting on minibuffer.

Also now delegating cursor positioning to the line on which it resides which is
the first step to properly handling non-single-width characters (like the
dreaded tab).