Reduce canvas from 4.2 to 2.2 Kloc by splitting it into separate files,
and move all such files to ui/widget/canvas.
* Cairo and OpenGL backends are now hidden behind a Graphics interface.
* Store manipulation logic+state is isolated in a Stores class.
* Utilities are split out into common headers.
Detect and add in missing letters from bad Unicode
Rarely a PDF will have two letters right next to each other be detected
as a single unicode. When we convert them to utf8 they split into two
but we only add the first letter, causing letters to be missing from the
resulting svg.
This uses tspans to allow us to add the extra letters without disturbing
the position of the following glpyhs.
Improve gui responsivity during bitmap tracing by moving all tracing,
siox processing and preview generation off-main-thread.
Improve trace bitmap performance by applying transforms before injecting
paths rather than afterwards, and eliminating a potentially expensive
pathvector copy, inefficient use of vector as unordered_set, and verbose
left-in stdout printing.
Fix siox items using selection order instead of zorder, siox items not
working off-page, and remove potential for crashes when document is
modified or closed while tracing.