This fixes an issue that allowed the handler for ( to take precedence
over C-x (.  The loop previously only terminated if a gap would exist
in the key map (such as if C-x and e both had handlers, but q doesn't
have any handler in the sequence C-x q e).  If a two key sequence existed
where both had handlers, but the handlers were disjoint (that is, the
first key had a single-key handler and the second key also had a single
key handler, we'd drop out of the loop with handler set and erroneously
return it, preempting a more specific match in a different keymap layer.
I believe this change doesn't break anything else, although my testing
is far from extensive.
This implements basic macros as in emacs.  C-x ( stuff C-x ) and C-x
e work as well as arguments with them.  The macro counter is not implemented
yet.  It is probably possible to do this in a less intrusive way, but I don't
feel that this is all that bad.
Silence diagnostics.