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.