pdInput: a new, comprehensive input handler for the program

Layer drag/drop reordering is one of the big Layer UI projects
remaining.  I've put it off not just because it's going to be unpleasant
(though that's part of it!), but because I'd really like a reusable
solution that could also be applied to things like the image tabstrip.
Also, it would be nice to have a solution that's flexible enough to
accommodate both mouse drag/drop and touch drag/drop, which differ
slightly in their handling (as touch drag/drop must also cater to touch
list scrolling, which uses similar "click-hold-move" behavior.)

Simultaneous to this is the approaching possibility of paint tool
implementations, which need an input framework capable of being extended
in the future, with support for cool things like spline interpolation of
MouseMove points, fine-grained mouse handling via GetMouseMovePointsEx,
and ideally pen input.  These are big requirements, and they necessitate
a solution more comprehensive than what VB's Mouse events can obviously
provide.

To that end, it was finally time to start work on a self-contained input
framework customized to PD's specific needs.  Enter the new pdInput
class.

For this initial build, the goal was to replicate most of what
bluMouseEvents and VB's internal mouse events provide, but in a
PD-centric way.  Some of my goals include decoupling all mouse
coordinate, mouse button, and key modifier handling from window
messages, and instead calculating them independently (so we can raise
them for events that don't normally report coordinate or key behavior,
and so we can also reliably support > 16bit mouse locations and odd
multimonitor setups).  I've also started work on comprehensive support
for WM_APPCOMMAND messages (to replace the current X-button handling),
and perhaps most importantly, this class will finally provide a solution
to PD's large collection of custom cursor handling code, which needs to
be reworked into a single input handler instead of being strewn across a
large variety of unorganized functions.

To start, I've tested pdInput on the layers toolbox, and found it
sufficiently stable to start rolling it out across the rest of the
project.  The primary image canvas will be the real test of the class,
as it has a terrible mash-up of custom and structured mouse and cursor
handling code that needs to be integrated into a single handler.

Once pdInput has been rolled out across the program, I think I'll
finally be ready tackle drag/drop reordering for the layer toolbox.