Add support for adjusting gamma levels
Simplify and refactor interfaces:
* Split alpha-conversion to a separate function
* Use doubles everywhere instead of unnecessary templates
* Simplify variation functions
* Use our own simple 2D vector type