text rendering with line placement on corners in 3.x

Fixes #2364.

This is first draft so far. It breaks a lot of visual tests such way I expect further changes.

`move` method of `vertex_cache` works by finding line-circle intersection. It was taken from 2.3.x. Original implementation is keeped under the name `move_by_length` - it's still required for creating offseted paths (I have maybe some idea how to get rid of it, though).