Update ignores
lexer.l #includes parser-tab.hh
Client-side handling of recursive nix

If NIX_REMOTE=recursive, the client checks
NIX_REMOTE_RECURSIVE_PROTOCOL_VERSION for an integer version. If it is
set and its major version matches the client major version (current
protocol version 0x101), it then reads a connected unix domain socket
file descriptor from NIX_REMOTE_RECURSIVE_FD. It sends a message
containing the client protocol version in the message data and a
connected unix domain socket in the ancillary data, and the other end of
that socket is then used for the normal daemon protocol.
Recursive nix client side: Report new paths

With recursive nix, it is possible for a build to legally gain access to
paths that weren't specified as its inputs (indeed, that is the whole
point). In order for the nix process that started the build to be able
to scan for dependencies properly, it must be told when these new paths
are (potentially) accessed.

This amends version 0x101 of the recursive protocol to put the socket fd
into NIX_REMOTE_RECURSIVE_SOCKET_FD and to put another fd into
NIX_REMOTE_RECURSIVE_PATHS_FD. This new fd is assumed to point to a new
kind of temporary gc root, where the root is kept from being considered
invalid by the parent nix process staying alive and thus only a write
lock is needed to avoid a race between the gc reading the root file and
a process adding to it. Upcoming commits should clarify this if it's
confusing.
nix-daemon handling of recursive nix

nix-daemon now supports listening on an already-connected socket. In the
normal case, nix-daemon will listen on its traditional socket (passed
through systemd or not) and makes a new socketpair for listening for the
new kind of connection. If, however, nix-daemon was started with
NIX_RECURSIVE_FDS set, it uses the two fds listed in that env var as the
two ends of the connected socket and doesn't listen on the traditional
socket at all. In a future commit, LocalStores that were *not* launched
from a nix-daemon child process will launch nix-daemon with that env var
properly set if they need to perform a build.

In either case, nix-daemon now has a connected socket to read from and
possibly an unconnected socket it's listening to to connect to. When the
connected socket is readable, it reads the client recursive version from
the message data and the client domain socket from the ancillary data to
form a new connection. If the listening socket is connectable, a
connection is formed as usual.

Finally, when a child process is launched, its LocalStore gets passed
the other side of the connected socket so it can use the existing
nix-daemon process for recursive nix instead of having to spawn a new
nix-daemon process every time (to be implemented in a future commit)