Reduce number of opens by GEOM RAID during provider taste.

Instead opening/closing provider by each of metadata classes, do it only
once in core code.  Since for SCSI disks open/close means sending some
SCSI commands to the device, this change reduces taste time.

Ticket:	#4870

(cherry picked from commit b384f8775fb9dac291a6c48827c9f7c4bd2bc455)
(cherry picked from commit 708ba71e38d5d05e7c4ffea6c55b294ea651aad3)
Do not reread SCSI disk VPD pages on every device open.

Instead of rereading VPD pages on every device open, do it only on initial
device probe, and in cases when device reported via UNIT ATTENTIONs that
something has changed.  Capacity is still rereaded on every open because
it is more critical for operation and more probable to change in run time.

On my tests with Intel 530 SSDs on mps(4) HBA this change reduces time
GEOM needs to retaste the device (that includes few open/close cycles)
from ~150ms to ~30ms.

Ticket:	#4870

(cherry picked from commit 6429f5f6361b358fde4f2643463a38637e700f1b)
(cherry picked from commit 272c4c89e0b9372e915bfa6bd323acab77d5eef4)
Import adapted OpenSolaris' thread pool API implementation.

The thread pool is used by libzfs to implement parallel disk scanning.
Without this change our dummy wrapper made `zpool import ZZZ` command to
scan all disks sequentially from the single thread when searching for pools.
This change makes it use two threads per CPU, same as in OpenSolaris.

On system with 200 HDDs this change reduces ZFS pool import time from 35
to 22 seconds.

Ticket: #4870

(cherry picked from commit 0f14c360e4d3c5f98d435a4e683df3f59a206d26)
(cherry picked from commit 2a94c5a8697da8ede0a161d59d0d16e7efa2327f)