Make `evil-replace` handle block selections with TABS correctly.

The old behavior, using `evil-apply-on-block`, considered a TAB as a
single character, thus replacing the TAB with exactly one character.
This leads to an unexpected visual impression, because one TAB usually
represents several spaces.

The new implementation uses `evil-apply-on-rectangle` and deals
explicitly with the columns covered by the block in each line. TABS
are converted to spaces if required.
Handle extension to eol in `evil-apply-on-block`.

`evil-apply-on-block` did not handle the case of a visual extension to the eol correctly.

This change unifies `evil-apply-on-block` and
`evil-apply-on-rectangle` into a single function. The only difference
between two is that the former should pass buffer positions the latter
column numbers to the function to be applied on the block. This can
now be chosen by a parameter of `evil-apply-on-block`.
`evil-apply-on-rectangle` is now a simple convenience wrapper always
passing the columns.
Fix highlight of block selection within TABS.

If (point) is placed on a TAB during a block selection, the selection
should include all columns covered by the TAB.

The new implementation takes care of this as well as a correct
extension to eol. The visual selection should now conform the region
affected by `evil-apply-on-block`.

--HG--
extra : amend_source : 910a55a6faab3e71afda2c2cbb2ae652e100feae