Make nix-modules available when defining user environments.

A new user specific configuration file is introduced.
It is located in "~/.nixuser/configuration.nix".
The idea is to have a declarative approach for defining the user environment
at some point. The configuration file acts as the input of a module evaluation
system, similar to "/etc/nixos/configuration.nix" for the NixOS configuration.

A new file "nixos/modules/nixuser-module-list.nix" is added.
The file lists modules that are made available both for system configuration
and for user configuration.
The file is imported by "nixos/modules/module-list.nix" and is used in
"pkgs/top-level/all-packages.nix".
This is highly weird, and I think you need to get more familiarized with the module system and make an option where each of these modules register in-self in this top-level modules.  These files do have the layout of modules but they are not process a-like, which is extremely confusing (and thus should be avoided).

You should convert the function makeProfile to an option.  In general, you should think in a declarative manner, this means that when you write a function which is used only once such as `myFunction = x: ... x ...;` you should think of it as `myResult = ... config.myOption ...;`.