Do zvol initialization at pool import

There is an extremely odd sporadic bug that causes zvols to fail to
appear on some systems, but not others. I recently reproduced the
failure to make zvols appear on my desktop and it occurred consistently
over a period of 1 month. After applying this patch, the issue
disappeared.

The changes made to spa.c are taken from FreeBSD's code. The changes to
zvol.c are my own. The zvol.c changes fix a few additional issues that I
spotted.  Specifically, the fact that we attempt to initialize zvols
before any pools are imported and the manner in which we handle failures
in zvol_init(). No longer attempting to initialize zvols before any
pools are imported has the side benefit in that we no longer try to take
the zvol_state_lock before it is initialized.

Signed-off-by: Richard Yao <ryao@cs.stonybrook.edu>