Rewrite the CTF editor

* This new design will allow for new types of function nodes that can contribute one or more values to the final function.
* Additionally, function nodes which control both color opacity and should now be possible.

For ease of review, you probably should ignore the diff. I've basically rewritten everything... Yeah. Sorry.
No need to reinvent the wheel. I think this would do what you're going for:
```
        centers = [node.center for node in self._nodes]
        index = bisect(centers, new_node.center)
        self._nodes.insert(index, new_node)
```