WIP: New approach to operators

Tried to reimplement as much of the operator overloading as possible using ``promote_type`` and ``convert`` methods. Ended up being a bit messier than I hoped, so not sure if this is an improvement over what we had before.
I think I branched off a branch (which later got merged) and so the history is messed up. I'll create another PR if we want to merge this.