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).