Enable tracking of repeated consecutive keystrokes

Detect and count the number of repeated, consecutive keystrokes within the keymaps.  This supersedes the REPL's own counting of consecutive returns to abort an incomplete AST entry within its on_enter done-check with a more general implementation. The on_enter functionality is very minutely different -- instead of checking for three consecutive newlines, this checks for three consecutive keystrokes that call the return callback (so, e.g., alternating between ^j and return won't trigger this).  But for nearly all use-cases this behaves the same.
Consecutive kills append to the kill buffer

When the same keystroke is used to repeatedly call edit_kill, the killed text is appended to the buffer instead of replacing it.
Only show completion options on the 2nd tab-press

Instead of the current complete-or-show-possible-completions behavior, this now requires a second consecutive tab press to show the possible completions. This behaves a little bit more like most shells, and prevents excessive printing of options in most cases.
Use repeated keystrokes for move_line_start/end

Jump to the start/end of input upon a repeated keystroke instead of detecting that the cursor is already at the beginning or end of a line. This way the behavior changes based purely upon the input instead of relying on where the cursor happens to be.