* Suppress "Handshaked with <host>" and "Not running as root"
messages when the -q option was specified.

* Mount points are now skipped completely. (Before this,
the directories and .cpignore inside them were still read.)

* Extract scanning directories (src and dst) from DoCopy() into
a function ScanDir(), and use ScanDir() for both src and dst.

* Remove threads support. It never worked very well and is
getting in the way of new development. The intention is to
develop a more efficient pipelined algorithm in the future
which does not require threading the program.

* Use getopt(3) instead of non-standard parser, making sure
that all options still work exactly as documented in the
manual page.

* Use fnmatch(3) instead of WildCmp(), adding support for
bracket expressions (e.g. [xyz0-9]) and escaping (e.g. foo\*).
I also suspect that fnmatch() is more efficient.

* Use the same syntax for remote paths as scp(1), so local paths
that contain colons can be specified (e.g. "./foo:bar");
extract that code into its own function SplitRemote().

* Add protocol commands hc_geteuid() and hc_getgroups().
Use them to properly check permissions for various operations
that would require root privileges on the target machine.

* Bugfix: If a symlink already existed on the target but the
owner/group didn't match, cpdup missed to update it.
Added a call to hc_lchown() to fix that, if privileges allow.

* Bugfix: The dispatch[] array wasn't initialized, so the slave
crashed upon an unknown command instead of calling rc_badop().

* Bump protocol version to 3 in order to be able to maintain
backwards compatibility with older clients.

* Bump utility version to 1.16.

* Make the source compile with WARNS=6.
It still doesn't pass -ansi -pedantic, though. :-)

The asm code was calling __tls_get_addr in order to set errno to 0
before the system call and that was trashing registers holding the
syscall arguments. Don't bother setting errno to 0 anymore (the
in-tree users are careful to set that themselves when appropriate).
While here, declare it properly as a weak symbol. At this point we
could just drop the hand-written assembly.

* Mark eax as early clobber in atomic_intr_cond_try. This solves a
longstanding and previously conditionalized issue with clang.
Marking it as early clobber avoids it being used as a register
elsewhere, apart from explicit uses.
GCC behaviour is not affected.

* Allow root logins via public key only (previously: root logins not allowed
at all via ssh). I've done this for years, it allows an authorized_keys
file in ~root/.ssh to work without having to adjust /etc/ssh/sshd_config
on every install.

Often people want plaintext passwords on e.g. workstations for xdm or
console logins, but do not want to allow their use over networked
connections. Since tunneled plaintext passwords are not considered very
secure and alternatives exist (aka public key logins) we now disallow
them by default.

Expand the support for PCI-e memory mapped configuration space access.

This defaults to off and must be explicitly
enabled by setting the loader tunable hw.pci.mcfg=1.
- Add support for the Intel 915GM chipsets by reading the BAR.
- Add parsing of the ACPI MCFG table to discover memory mapped configuration
access on modern machines.
- For config requests to busses not listed in ACPI's min/max valid buses,
fall back to using type #1 configuration access instead.
- Add a workaround for some K8 chipsets that do not expose all devices on
bus 0 via MCFG and fall back to type #1 for those devices instead.