Initial implementation of non-destructive on-canvas layer resizing

Wrapping my head around this whole non-destructive concept has proven
incredibly difficult.  There are *so many* interactions to deal with
here, and catering to them all is a big mess.

That said, this initial commit works pretty damn well, and the code is
surprisingly light and clean, all things considered.  A few items left
for me to resolve include:

1) Bounds checking to make sure the user doesn't try to resize a layer
to negative width/height.  (It would be nice if that just
flipped/mirrored the image, but our resize functions don't work that
way, and it's a lot of work to change them - so at least at first, such
actions will simply be disallowed.)

2) Interaction with selections.  I don't think I can handle the math
necessary to keep the non-destructive behavior working with selections.
What does this mean?  Basically, when the user applies an action to a
resized layer *while a selection is active*, it will commit the current
layer size permanently.  This is on my to-do list.

3) Any other actions that require "committing" a resized layer, such as
image-level changes (resize, rotate, etc), need to be handled properly.

4) Tons of testing and debugging.