Fixing 3 problems revealed by first set of tests:
- self assignment of functions was broken
- detection if rhs is empty didn't always work
- invoking empty function object now throws instead of asserting