Improve zvol initialization code

There is an extremely odd bug that can cause zvols to fail to appear on some systems, but not others. Recently, I was able to consistently reproduce this issue over a period of 1 month. I found several things wrong in how zvols were being initialized, so I fixed them with some inspiration from FreeBSD. I can no longer reproduce the missing zvol issue after applying these fixes.