zvol: call zvol_first_open upon the creating of zvol geom

... and symmetrically call zvol_last_close when the geom is going away.
Also, do not needlessly call zvol_size_changed in zvol_first_open.

There is no need to blindly mimic Solaris behavior when FreeBSD GEOM
interfacing can be more efficient (and proper).
Also, this simplifies locking in zvol_open/zvol_close and fixes
the really broken behavior in zvol_geom_access of dropping the
g_topology_lock.
zfs/geom: never re-use a consumer for simplicity/clarity

And call vdev_geom_detach in vdev_geom_close directly
instead of asynchronous call via geom event thread to make sure
that the old consumer is detached/destroyed when vdev_geom_close
returns.
With the new approach to always creating a dedicated consumer the new
consumer could fail g_access call because the old consumer could still
be attached and holding references (including the exclusive one).

My understanding is that the asynchronous approach was used to avoid
some locking order issues with zvol, which should be already resolved.
zfs: zvol's 'minor' should be destroyed before the zvol can go

Otherwise the minor holds the zvol's dataset busy and thus it can not
be destroyed nor its pool can be exported.
This requirement arouse after changing at what time a zvol geom acquires
a hold on its dataset.