  It is now possible to add identifiers to the global environment, so
that they will be visible in various nested compilations.  This is
useful for frequently used types that you don't want to declare as
"extern"s in every compilation.  It is even more useful if it matters
that all refrences to the file should reference the same instance (for
example, because the top level function in that "extern" is expensive
to evaluate.)
  Identifiers are added to the initial environment by initializing the
compiler with these predeclared identifiers, and then running the
initialized compiler.  The main disadvantages of this procedure are:

1.  If the initial environment changes in any way, everything using
  that initialized compiler must be recompiled.

2.  The generated initialized compiler executable is HUGE (~700K).
  You should avoid having many of these lying around.

The procedure for adding something to the initial environment is as
follows:

1. Build a file describing the environment.  This is a Russell program
  that implicitly surrounds other programs compiled with the generated
  compiler.  For example:

  let
	a == 17
  in
	^B
  ni

  would predefine a to be 17.  A ^B character is used as a placeholder
  for the rest of the program.  Keep this file as small as possible,
  since it is largely recompiled with every compilation.  Use "extern"s
  for large pieces of code.  (Such extern's must be normally compiled before
  the following step.)

2. Compile this file with -dI.  (-d ==> generate a demand paged compiler
  executable.  -I ==> use the standard pre-initialized compiler rather
  than starting with a blank slate.)  This will generate a file called
  Grc.x in the current directory.  (Yes, the compiler actually understands
  even more undocumented flags.)

3. Compile any files that need the new environment from the directory
  containing Grc.x with a -u flag (in addition to the usual alphabet soup).
  The flag simply tells rc to use the Grc.x from the current directory
  rather than the standard place.

