taskqueue - Major overhaul
* Move taskqueue from critical sections to fine-grained locking with
lockmgr for the list of taskqueues (could be changed to spinlocks) and
spinlock for the task queue in each taskqueue itself.
* Add a taskqueue_swi_mp which is for mpsafe tasks. Unlike taskqueue_swi
the mplock is not acquired when tasks are run.
* Add FreeBSD's taskqueue_start_threads and family, allowing for
per-taskqueue threads.
* Add FreeBSD's taskqueue_block and taskqueue unblock.
* Out of necessity add a register_swi_mp, which registers a swi marked
as MPSAFE.
Partially-Obtained-from: FreeBSD