Fast Pinch-Zoom support on the sizer.

This patch adds a new class ZoomHelper that
is used to control the zooming of the document
by API and/or touch gestures. CSS3D transforms
are used to do extremely fast bitmap scaling
of the sizer.
Show custom scrollbars in touch mode.

This is required because webkit on mobile
does not seem to show any scrollbars if
`-webkit-overflow-scrolling: touch` is not
enabled -- and we cannot enable that because
it's kinetic scrolling is not controllable
or trackable.

Enable virtual scrollbars when in scroll mode,
othwerwise disable them. This is done because
the scrollbar size/position makes no sense
immediately after a removeScroll() call, because
the perceived panning is done through CSS.
Implement runtime.requestAnimationFrame()
which abstracts away browser prefixes
and simply executes the callback if it is
not supported by the browser.

Also adds cancelAnimationFrame() similarly.
Link the zoom slider to the current zoom level
of the ZoomHelper.
Make ZoomHelper be able to switch the element
at runtime. Useful for undo support.
Merge pull request #433 from adityab/enable-pinchzoom

Fast Pinch-Zoom-Pan support on the canvas sizer
Add test for frame position.
Add a helper function to get the bounding rectangle for an ODF page.
Improve positioning of frame that relative to page.
Add type that is a union of ClientRect and a struct with the same members.
This makes is possible to use them interchangeably.
In older browsers, positioning is only allowed on whole pixels.
The positioning test should set the allowed error higher in such browsers.
Add more supported length units.
And add a bit of documentation.
Check for null return value for getBoundingClientRect.
Slight clarification of exception.