Pass lib to modules

Since mkOption, types, etc. are defined there, lib is really part of the interface

(cherry picked from commit 2deb26bd4a0c21d7c5eef54cdd2f4913699efb7c)
Add nixosSubmodule option type

Since NixOS modules expect special arguments, use a hack to provide them

(cherry picked from commit ca1c5cfa8fff055c74786dbe0d2ca889ae462365)

Conflicts:
	nixos/modules/virtualisation/containers.nix
Add option type for a submodule with extra arguments

(cherry picked from commit 8764758044b0425de54228d87cc68a4ed6d4d414)