code: function Environment(env, log) {
  	env = env || {};
  	log = log || console.log;
  
  	// Copy over reference object
  	for (key in env) {
  		this[key] = env[key];
  	}
  	this._fm = new FluxMeta(this, log);
  
  	// Bind member methods so that they can be passed as callbacks
  	this.$throw = ep.$throw.bind(this);
  	this.$catch = ep.$catch.bind(this);
  }
docs: Creates/extends an object suitable to use as an environment by initializing the stack and some utility
  methods.
  
  Calling convention for passing arguments on the stack: Arguments are pushed in the order they are expected,
  that is:
  [---lower stack frames---][ push arg 1 ][ push arg 2 ][ push arg 3 ]
  When calling the next method, the appropriate number of arguments will be popped off of the end of the stack,
  so if after only requires two arguments, it will pop off arg 2 and arg 3, leaving arg 1 on the stack. This
  is useful for passing arguments past function calls or returning multiple values from a function call.
  
  @param env Optional base environment with initial local variables
  @param log Function to use to log critical errors (like when $throw() is called with no exception handlers)