wip: Allow booting nixos from a subdirectory of the root device

Assuming we are installing nixos under /nixos, we mount --rbind /nixos /mnt and do the usual installation.
Then in the configuration.nix:

```
  boot.loader.grub.doInstall = false;

  fileSystems."/mnt/root" =
    { device = "/dev/foo";
      fsType = "bar";
      neededForBoot = true;
    };

  fileSystems."/" =
    { device = "/mnt/root/nixos";
      fsType = "none";
      options = "bind";
    };
```

Finally add a menu entry to the existing grub loader of your device with something like: `configfile (hd0,...)/nixos/boot/grub/grub.cfg`.

This PR must not be merged, I need some help on what's the best practice for factorizing bootFileSystems and closestMountPoint which are used in both grub.nix and stage-1.nix.
They are used to automatically detect the correct order of the mounts and to detect the subdirectory of the nixos installation to be used in the grub configuration. This was a choice from a discussion with @edolstra on irc.
Computes the list of file systems to be mounted in the initrd.
`closestMountPoint /a/b/c` returns the file system having the longest mountPoint being prefix of /a/b/c, if the path is a /dev/* then it's null.
`fsClosure fs` returns the list of file systems for which fs depends upon by means of closestMountPoint. For example, fileSystems."/" = { device = "/a/b/c"; } and fileSystems."/a" = { device = "/dev/x"; } means that / depends upon "/a" because /a is the longest mount point that is prefix for /a/b/c. So `fsClosure fileSystems."/"` returns `[ fileSystems."/a" fileSystems."/" ].

The `visited` argument is used to avoid repeating the same file system twice.