Commit my "devvp" changes to the thorpej-devvp branch.  This
replaces the use of dev_t in most places with a struct vnode *.

This will form the basic infrastructure for real cloning device
support (besides being architecurally cleaner -- it'll be good
to get away from using numbers to represent objects).
Various changes to make cloning devices possible:

	* Add an extra argument (struct vnode **) to VOP_OPEN. If it is
	  not NULL, specfs will create a cloned (aliased) vnode during
	  the call, and return it there. The caller should release and
	  unlock the original vnode if a new vnode was returned. The
	  new vnode is returned locked.

	* Add a flag field to the cdevsw and bdevsw structures.
	  DF_CLONING indicates that it wants a new vnode for each
	  open (XXX is there a better way? devprop?)

	* If a device is cloning, always call the close entry
	  point for a VOP_CLOSE.


Also, rewrite cons.c to do the right thing with vnodes. Use VOPs
rather then direct device entry calls. Suggested by mycroft@

Light to moderate testing done an i386 system (arch doesn't matter
though, these are MI changes).
Do that regen thang.
Add an entry about the locking state of vnodes when calling device entry
points.
Use VOP_OPEN in a few cases where it's more appropriate to do so (to
gracefully handle dead vnodes).
Use vget, not vref, when acquiring an already existing console device vnode.
Attempt to clean up the sequencer code a bit, with only 50% success.
Clarify the somewhat confusing if() statement in checkalias with a comment.
* add a VCLONED vnode flag that indicates a vnode representing a cloned
  device.
* rename REVOKEALL to REVOKEALIAS, and add a REVOKECLONE flag, to pass
  to VOP_REVOKE
* the revoke system call will revoke all aliases, as before, but not the
  clones
* vdevgone is called when detaching a device, so make it use REVOKECLONE
  to get rid of all clones as well
* clean up all uses of VOP_OPEN wrt. locking.
* add a few VOPS to spec_vnops that need to do something when it's a
  clone vnode (access and getattr)
* add a copy of the vnode vattr structure of the original 'master' vnode
  to the specinfo of a cloned vnode. could possibly redirect getattr to
  the 'master' vnode, but this has issues with revoke
* add a vdev_reassignvp function that disassociates a vnode from its
  original device, and reassociates it with the specified dev_t. to be
  used by cloning devices only, in case a new minor is allocated.
* change all direct references in drivers to v_devcookie and v_rdev
  to vdev_privdata(vp) and vdev_rdev(vp). for diagnostic purposes
  when debugging race conditions that still exist wrt. locking and
  revoking vnodes.
* make the locking state of a vnode consistent when passed to
  d_open and d_close (unlocked). locked would be better, but has
  some deadlock issues
Fix typo in vdev_inshash causing 'missing alias' panics.
Put back line that got misplaced somehow.
Do real locking for cloned vnodes (most filesystems have real locking
for spec vnodes, so clones should have it too).  Could probably do locking
all the time for spec vnodes, but need to check if vnodes created
during bootstrap with {b,c}devvp will cause trouble if they have actual
locks.
Catch up with -current for this file to enable new toolchain builds.
In vgonel, if usecount > 0 and the vnode refers to a device, defer
allocation until the last vrele, to prevent specinfo being ripped
from under a device function.
Add flag that says "this vnode had its specinfo deallocation deferred".
Bring locking state of VCHR vnodes across device entry points back
to what they used to be. The locking state of vnodes across
device functions really needs to be cleaned up, but at least
this is not worse than it was before.
Fix vput typo.
Merge with -current.
Catch up with -current.
Catch up with -current.