Preserve point position when indenting.

Fixes #7966.

The new logic is as follows:

If point is in the leading whitespace, jump to the first non-whitespace
character.

```
Before:
  |  foo
After <tab>:
    |foo
```

If point is on non-whitespace character, preserve its offset after
indentation.

```
Before:
  fo|o
After <tab>:
    fo|o
```

Finally, if point is on an end keyword (see `julia-block-end-keywords`),
then skip to the end. This allows repeated `<tab>` to navigate out of
blocks.

```
Before:
|        end
    end
<tab> once:
        end|
    end
<tab> again:
        end
    end|
```