Refactor Vim2.VimBinding

It boils down to this:
```diff
- 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.

@mgajda: While porting your config I didn't understand how `matchesString evs "D"` worked and what `"<D>"` was, so I just commented them to make yi-contrib compilable. Can you help with these bits?