amb now interacts properly with set!.

Major change: procedure environments are now stored in an alist
instead of as a field in the procedure.  This allows them to be
transparently copied when necessary.

As a result, procedure environments are presently never
garbage-collected.  weak-cons might be useful to fix this problem.

There is also an issue with extreme inefficiency. Ideally we would
come up with a copy-on-write scheme, so that when there are no set!s
no copying needs to happen.

The env-stack stores the outer environment when we enter a procedure
call. The inner environment reflects where the procedure was defined,
so it is not necessarily at all related to the calling environment.

Now to-do: selectively breaking the new scheme so that things like
succeed-once can still be implemented with ambc.