Improvements for the dbuf user evict mechanism.

- Rather than maintain a series of references in dmu_buf_impl_t that are
  only meaningful in the context of a user, maintain a dmu_buf_user_t *.
  This simplifies the dbuf layer interaction.
- Rototill the API with one that allows users to more clearly specify intent.
- Avoid lock order reversals by placing a to-be-evicted user on a list,
  then call the eviction callbacks once the dbuf's mutex has been dropped.
  Consequently, enforce that users may not touch their DMU buffers while
  inside their eviction callback.
- Simplify access to physical representations by union'izing the user's
  physical data buffer with the in-core reference.  This also avoids the
  potential for user data pointers getting out of sync.

Submitted by:	Will Andrews <willa@spectralogic.com> (in part)
Submitted by:	Justin Gibbs <justing@spectralogic.com> (in part)
Comment cleanup per illumos style guidelines.
Whitespace cleanup.
Dbuf user evict verification: Don't check hold counts.

Hold counts are modified independently of the dbuf mutex, so it's
not possible to make any assertions about them.

The assert failed for me during testing that involved creating,
renaming, and destroying snapshots in a tight loop.  The reason
was because while one dsl_dir user was being evicted, the dbuf for
it was being reopened by another thread that had bumped its hold
count but not yet assigned an user.

Submitted by:	Will Andrews <willa@spectralogic.com>
Spectra change:	P4 646309
Document why we used name alias macros for dbuf user data access.

The original commit message was:

Change 630320 by justing@justing_ns1_spectrabsd on 2012/08/30 08:21:26

	Refine the ZFS "buffer user data" API changes made in
	changeset 629254 to reduce its impact on consumers of
	the previously available "user data pointer update" feature.
	The macro changes required before touch hundreds of lines of
	code and would have complicated the process of upstreaming
	this work.

	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dir.h:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_leaf.h:
		For clients that used to rely on the "user data
		pointer update" feature, define object specific
		"dmu_buf_t" like objects that contain pad data and
		a properly typed "physical object" data pointer at
		the same offset as dmu_buf_t's db_data field.  Use
		an anonymous union overlay and macros to redirect
		what were accesses to a separate physical object
		"user pointer" to the dbuf's db_data field.

	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zap_impl.h:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c:
		The ZAP implementation already uses a union to overlay
		the data fields of the micro and fat ZAP types.  The
		previous usage of this union to access the physical
		object pointer can't be directly emulated while still
		redirecting all accesses to use the same data pointer
		field.  For this reason code of the form:

			zap->zap_f->zap_phys

		have been changed to:

			zap->zap_f_phys

	cddl/contrib/opensolaris/cmd/zdb/zdb.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_diff.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_traverse.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deadlist.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_deleg.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dir.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_synctask.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sa.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_raidz.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_leaf.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zap_micro.c:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c:
		Revert introduction of the DSL_DATASET_PHYS(),
		DSL_DIR_PHYS(), and ZAP_LEAF_PHYS() macros.

	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h:
	sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_prop.c:
		Rename dsl_dataset_has_phys() to DS_HAS_PHYS().  It is
		a macro, and why the convention isn't always followed
		in dsl_dataset.h, most of its macros are capitalized and
		just use the "DS" prefix.

Submitted by:	Justin Gibbs <justing@spectralogic.com>