Fix superenv arch flag handling

Fixes #21943.
This is a backreference, not an embedded NUL
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.