Fix UI so that consistent zoom size is maintained as pages changed.

Also fix issue that occurs in Windows 8.1 with an unhandled exception
if a mouse scroll occurs before a document is even opened.

Fix issue with keyboard based update of page slider.
Addition of printing support.

This uses the xaml printing methods.  It is likely that I need to go do a DirectX approach since the xaml
printing method could run into memory problems as it seems the architecture requires all the pages to
be rendered prior to the print job even starting.  Currently checking on this with a contact at MS.

I wanted to get this code in place now since it is working and it has the needed framework for much of
what we want.   A change to DirectX requires a changes in the solution file that may be complicated and so it
makes sense to do a split here with respect to providing printing support.
Make sure declarations come first.   This would not compile with default windows settings.
Fix of tab/space issues as well as changing thumbnail scale look ahead to +/- 2. Thanks to Robin for catching this.
Ignore <!DOCTYPE ...> declaration in XML parser.
Improve stroke state function names that take the dash array length.
Fix bug in fz_debug_xml.

Print node and children, not node, children and siblings.
Add binary search tree for mapping strings to void* pointers.

Self balancing AA-tree.
Allow stroke states to be kept on the stack.

Add a function to clone stroke states, a magic number to keep in the
reference count to signal that a stroke state is stack-stored, and
automatically clone stack stored stroke states in the keep function.

Use fz_default_stroke_state to initialise stack stored stroke states.
Fix bug 694730: Wrong bbox in one-point ink annotation

Zero and one-point case both lead to an empty rectangle, but the one-point case
needs expanding but wasn't because fz_expand_rect treats an empty rectangle
as a special case (as it should)