Fix canvas cursor behavior during MouseMove

Cursors should be set at MouseDown, then preserved throughout the life
of MouseMove.

The only time MouseMove should set its own cursor is if NO mouse buttons
are down.
Further attempts to reduce UC flicker

If GetUpdateRect returns 0, there is no update region, so we can skip
the paint step entirely.
New pdDictionary class

My next stage of selection code refactoring involves trimming down the
(enormous) pdSelection class as much as possible, to make breaking it
into smaller chunks less problematic.

First up is removing dedicated wrapper functions for each selection
property, and instead using a single dictionary-style interface.  This
will not only trim down code, but it will also make it much easier to
validate property changes (as only a single function will need the
validation code, and all properties will gain it automatically).  This
should allow us to reduce the amount of selection mask redraws required
for things like moving or resizing selections, which will further
improve UI smoothness.

For reasons explained in the attached class, I'm going to use a
lightweight PD-specific Dictionary class for this.  Scripting.Dictionary
is nice, but it's a lot heavier than I require, and it's also
problematic for things like writing consistent selection files (because
there is no notion of "order" for added entries).

If this goes well, I'll be moving a number of other PD classes to the
Dictionary approach for properties, which will hopefully allow me to cut
a lot of redundant code from the project, while also improving tolerance
against things like locale-specific data issues.
Selection engine: convert all properties to pdDictionary, misc bug-fixes

Not so interesting for end-users, but this is a huge step toward
multiple selection support.  As a nice bonus, this will also allow me to
greatly simplify selection tool UI code.