* Fix a recently introduced bug in uiomove() related to error handling
when iovcnt is greater than 1.

* Fix a deadlock in the vm.read_shortcut code, rare triggerable except
by vkernels.

The deadlock is due to a busied VM page being held across a uiomove().
To fix a new function uiomove_nofault() was added which causes EFAULT
to be returned for any non-trivial VM fault (any fault related to nested
objects or vnode objects).

The vop_helper_read_shortcut() procedure uses this new uiomove function
and breaks out when the case occurs, returning and falling through to
the filesystem's normal buffer-cache-based read() code.

* As an added bonus, we no longer have to unlock the VM object across
the new uiomove_nofault() call in the read shorcut code, since it is
no longer possible to deadlock against the VM object.

Sometimes disks designed to operate in low power mode by default
constantly spin up/down during operation which leads to reduced
performance.

This commit adds the 'feature' command to natacontrol(8) which
can be used to tweak the 'advanced power management' and 'automatic
acoustic management' features. Their current setting could already
be viewed before this commit using the 'natacontrol cap' command.

I'd like this to be possible with camcontrol(8) too for CAM attached
disks, but afaict these are ATA specific features so I guess we'd
have to integrate ATA into CAM too before that is possible.

libc/libthread_xu - Fix segfault caused by libpthread used before initialised

If a binary has libpthread as dependency and is linked against libintl,
or any other library that uses pthread locking primitives from libc
without depending on libpthread itself it can happen that functions
from libpthread are called before libpthread's constructor has been
called. This leads to a segfault.

This fix adds a weak symbold to libc, namely _pthread_init_early,
which is called from a libc constructor function and therefore makes
sure that libpthread is initialised early enough.

Thanks to Simon Schubert, Angelos Oikonomopoulos, and Sascha Wildner
for the support in debugging this.

When a syscons process put itself into MOUSE_MODE, a process-hold
was being placed to stabilize the process for signal delivery. The
hold was not being released on process exit, however.

This change reworks syscons to install a per-process flag as to
whether it is in MOUSE_MODE or not and to remove the excess hold on
exit(). It also cleans up the error handling and prevents stale
process pointers from lingering in syscons stat structures.

Comparing to the lwkt_serialize functions, the above two operations are
costful.

Driver changes:
- For device drivers which use the default ifnet serializer, no additional
code will be needed, if_attach() will assign ifnet serializer to
ifaltq_subque.
- For device drivers which use independent serializers for main function,
RX queues and TX queues, ifsq_set_hw_serialize() must be called to
properly assign the hardware TX queue's serializer to ifaltq_subque.
Drivers in this category are bce(4), emx(4), igb(4) and jme(4).