Extend Superenv onto ENV instead of defining it on the singleton class
Move setup into an extended callback
Move superbin into Superenv module
Make Superenv activation explicit
Move common stuff to extend/ENV.rb
Move extra stdenv setup to extended callback
Reference self rather than ENV in Superenv module

We want to be able to extend this module onto an arbitrary hash and use
it without mutating ENV, for testing purposes.
Reference self, not ENV, in ENV.fortran
Re-enable superenv ENV[] hack
Fix superenv ENV[] hack

We override ENV[] to always return strings under superenv, because
legacy formulae assume that CFLAGS, etc. are non-nil.

However, the current implementation has a bug. If I simply concatenate
ENV['CFLAGS'] with another string, it mutates ENV['CFLAGS']:

  irb> ENV['CFLAGS']
  => ""
  irb> ENV['CFLAGS'] + 'a'
  => "a"
  irb> ENV['CFLAGS']
  => "a"

Instead, let's simply return an empty string if the key doesn't exist.
This is sufficient because the following are equivalent:

  1. ENV['CFLAGS'] += "string"
  2. ENV['CFLAGS'] = ENV['CFLAGS'] + "string"
Move superenv.rb to extend/ENV/super.rb
Move common ENV methods to a shared module
Rename HomebrewEnvExtension to Stdenv
More robust implementation of ENV.with_build_environment
No longer call ENV.userpaths! in requirements

Instead we use which with a custom PATH.
Initial tests for superenv sanity
Remove ENV.expand_xcrun

This method is currently unused and after inspecting the git history, it
appears it may never have been used at all.
audit: activate ENV extensions
Use File::PATH_SEPARATOR globally instead of ':'

On Unix, the path separator is ':', whereas on Windows,
it is ';'. This is the first of a series of patch to bring
macbrew's and winbrew's codebases closer together.

The main places the magic constant ':' was being used were:
  - the $PATH environment variable
  - CMAKE-related environment variables
  - pkg-config related environment variables

Closes #21921.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>