refactor VimBinding type.

It boils down to this:

- prereq :: EventString -> VimState -> MatchResult ()
- action :: EventString -> m RepeatToken

+ binding :: EventString -> VimState -> MatchResult (m RepeatToken)

It's now impossible to accidentally pass different eventstrings to
consecutive prereq and action calls. Not that it happened before.

Also many lines like

  error "can't happen, because we already checked that in prereq"

are no longer necessary.