zvol rework

The Illumos taskq import that I have been developing is incompatible with the current zvol code due to how Linux handles interrupts. This refactors the zvol code to stop processing IOs in interrupts. See the commit message of ryao/zfs@549980158ce5ae9faa445472a98a6c90a27cc3b5 for a full description of the benefits. To summarize, we see the following benefits from this change:

1. No per zvol spinlocks.
2. No redundant IO elevator processing.
3. Interrupts are disabled only when actually necessary.
4. No redispatching of IOs under heavy load.
5. Linux's page out routines will properly block.
6. Many autotools checks become obsolete.

In addition, this pull request includes ryao/zfs@4ed7d715f5221c7ca00e22df9123b6bb4e08c700, which is a fix for a potentially rare deadlock in ZIO processing that became readily reproducible in the presence of this change.