implement multiple recursion

everything in the global scope is in one big let binding
split spl programs into visibility ranges

- also, don't quantify identifiers
support for scope separators, filter default environment in result
prettyprint types with nice type variables
fix claimed type of functions
inferDecls: fix threading of unifiers