Convert viewport to use new pdScrollAPI class

Lots of wide-sweeping changes throughout the program due to this change.
Since I had to revisit so much code, I figured I'd take the opportunity
to remove direct scroll bar access, and instead force all scroll
changes/retrievals through wrapper functions in the viewport.

This chance to revisit so much code led to some nice optimizations on
account of the pdCanvas's recently acquired ability to suppress redraws
when necessary.  So the primary viewport should be looking pretty damn
good these days!