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

There was a nasty bug here - without this if statement method could be called when `current_segment_` was pointing to `current_subpath_->vector.end()` thus accessing `current_segment_->length` lead to undefined behavior. And it was called.