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

Commented [here](https://github.com/mapnik/mapnik/commit/64d5153aeaeb1c9e736bfead297dfea39b066d2c#commitcomment-7499036) with more detailed description.