nix-exec: extract out common compilation steps
Properly handle system mismatch at eval vs runtime

The previous `target-system`/`eval-system` distinction was never fully
implemented, and it was not clear how to do so in a clean way. Instead,
`defnix` now has a `native` attribute corresponding to an import of
`defnix` with the same overrides and config, except `config.system` is
set to the eval-time system. The expected usage pattern is that `defnix`
will be imported with `config.system` set to the *target* system, so
internally functions that may result in native code run at eval time
(such as those in `eval-support` or `nix-exec`) must take care to
reference `defnix.native` instead of `defnix` where relevant.