pdLayer: add comprehensive non-destructive FX tracking

Well, this has turned into a case of "go big or go home."  :/

I had originally intended for these quick-fix FX options to be just like
regular filters, but applicable directly from a toolbox (rather than
forcing the user into the menus).  But upon further consideration, I
thought - if I'm going to the trouble of creating a whole new system for
DIB editing, why not go all the way and make it completely
non-destructive?

Thus this commit.  I'm sure some tweaks will be required once I
implement the filters themselves, but at present, layers are now capable
of tracking non-destructive FX state changes internally, and when
reading/writing data to file or param string.
Tools: PD's first non-destructive edit tool now implemented

This is one of those glorious commits that stands on the shoulders of
many forward-thinking design decisions in the past - decisions that
seemed overkill at the time, but are now vindicated, because as of this
commit (which is primarily proof-of-concept), PD now has a backend
capable of selective non-destructive layer editing.

The biggest (and most obvious) caveat of this new feature is that
non-destructive layer editing must be custom-implemented on a
tool-by-tool basis, and there is no conceivable way that I can ever
implement it for *all* tools and effects.  Instead, a small subset of
essential tools, likely those related to standard per-pixel lighting and
color corrections, will get this special treatment.

I've prototyped the function using White Balance, which is a worst-case
tool for non-destructive editing because it requires the up-front
construction of a full histogram (as opposed to something much faster,
like naive LUTs).  But performance of the function is still quite good,
which gives me confidence that this approach is sustainable.

(FYI, I'm actually going to be removing the non-destructive white
balance feature in favor of other tools, so don't get too attached to
it!  It was just my prototype.)

Because PD is awesome, non-destructive effect data is fully compatible
with the PDI image format, and no changes to the file format were
required.  Instead, the pdLayer object's XML interaction functions have
been updated to read/write non-destructive effect entries as well.  The
existing image checkpoint code for Undo/Redo data also handles the new
features without modification, because it's just that good.  :P

The plan for the "quick-fix" menu, which is where the first set of
non-destructive edit tools will live, is to roughly mimic a comparable
set of tools to iPhoto.
(http://www.austinareaphoto.com/wp-content/uploads/2010/01/iPhoto-Adjust-.png).
I'll also be adding some kind of "commit" button that makes the changes
permanent, which will not only improve viewport performance (as
non-destructive edits have to be processed on-the-fly), but will also
help with unpredictable results when merging two layers that both have
non-destructive edits active.

Finally, note that the pdCompositor class handles all non-destructive
edit duties.  As more features are added, I will likely write custom
compositor versions of each feature instead of using existing PD ones,
as the compositor versions need to be as fast as humanly possible.  That
said, the white balance prototype uses the existing PD version and is
just fine, so we have some room to work with...