Overhaul of the canvas custom cursor framework

Now that I'm getting deeper into on-canvas tool architecting, it's
necessary to revisit a bunch of work from my initial selection
implementation.  First up is the way that PD's canvas UC sets custom
mouse cursors.

I've now set aside a dedicated sub for this purpose, which greatly
cleans up the various mouse event functions.  However, I still need to
rework the selection code in those subs, which is messy and not
well-organized (besides relying on a bunch of custom cursor code).

That said, this commit fixes some annoying issues where previously,
releasing the mouse would cause the cursor to reset.