Fix arbitrary pure function calls
Support for arbitrary observe and make observer methods

The expression 'foo(a, b)' will first check for 'makeFooObserver' then
'observeFoo' methods before falling back to simply 'foo'.
Add spec for extensible logic gates
0.1.27