Support partial application of known functions

This is functional, but will be refactored a bit as support for
uncurrying is added.
Support uncurrying

This commit also changes an early design decision and a symbol returned
by a function can no longer be used to indicate a function. This is
allowed by the spec and implies that instead of:

  (defun foo () +)

the following must be used:

  (defun foo () (function +))

See http://www.shenlanguage.org/learn-shen/shendoc.htm#The%20Semantics%20of%20Symbols%20in%20Shen%20and%20KLambda.

Making this change allows us to get rid of __apply and therefore enable
much faster function and abstraction application.