Use standardized implementation of attribute set extensibility mechanism
instead of manually re-implementing it.
Suggested by @cstrahan at https://github.com/NixOS/nixpkgs/pull/26668.
This makes beam.package.erlangR19.abnf to be actually built with R19,
instead of the default R18. It means that Elixir and LFE are provided in
two versions, one built with R18 and with R19.
Please note that Elixir does not build with R16 and R17 - trying to
access beam.packages.erlang{R16,R17}.elixir will throw an error.
This change introduces a fixpoint, which allows to do deep override when
building packages defined in pkgs/development/beam-modules/default.hex.
This allows to provide beam.packages.erlang{,R16,R17,R18,R19} which
contains the same packages built with different Erlang/OTP versions.
Top-level attribute beamPackages points at beam.packages.erlangR18, the
same applies to other top-level Erlang packages.
TODO:
- beam.packages.erlang{R16,R17} is almost useless, since rebar/rebar3
does not build using these versions;
- all packages in beam.packages which use buildMix are actually built
with erlangR18;
- update documentation.