These changes are mosly to make actual locking better, except the
device_busy/unbusy which is real change (there's 3 changes here that are
separate in my git tree, but mixed together for this preview-review)
Make device_busy/unbusy work w/o Giant held
The vast majority of the busy/unbusy users in the tree don't acquire Giant
before calling device_busy/unbusy. However, if multiple threads are opening a
file, say, that causes the device to busy/unbusy, then we can race to the root
marking things busy. Create a new device_busy_locked and device_unbusy_locked
that are the current implemntations of device_busy and device_unbusy. Make
device_busy and unbusy acquire Giant before calling the _locked versrions. Since
we never sleep in the busy/unbusy path, Giant's single threaded semantics
suffice to keep this safe.
Push Giant lock down inside of mii_attach
Several drivers do a deferred attach of the mii bus and takeout and drop Giant
to do that. This is undesirable, so push the giant use down into mii where we
can more easily change it.