Tools: implement non-destructive Exposure and Contrast adjustments

I've condensed the two into a single function for performance reasons.
Very easy to add new non-destructive features, now that we have a solid
framework in place!