Added ability to match do/end pairs plus fixed various bugs.

New features:
* Matches *do/end* pairs

Bugs fixed:
* Works better when the cursor is on one of these: {[()]}
* When the cursor is not on a supported matched end point
      or a match cannot be found, it used to jump to the beginning
      of the line.  Now it stays put.
* Uses the safer *normal!* instead of *normal* at various places.

Flaws:
* Hacky use of 'normal! mZ' may screw up your marks