Changed the type of Gradient to be more sensible. Refactored things to
make more sense. Added a way to compose gradients pretty naturally.