Proprely handle nested empty lists
Implement 'lambda' primitive

This also involved refactoring of function application to support the
application of abstractions. In the process, the behavior for function
application was futher fleshed out.