Changed the function abstraction to cover macros and regular functions, as well as special functions.

Added orthogonal support for macro-phase and call-by-name.