First (plausible) draft of Linux workqueue implementation rework.

Untested, but this looks better than what was there before, or any of
the drafts leading up to this which got torn out of the typewriter,
crumpled up, and crudely tossed in frustration toward the wastepaper
basket by my desk alongside the empty bottles of Jack Daniels that
fueled them, or something like that.

Can't use multiple CPUs per workqueue.  That requires some explicit
management of per-CPU workqueue state, since NetBSD's workqueue(9)
doesn't provide that or cancellation or flushing.  Oops.
Add flush_scheduled_work back.
Helps to actually allocate and free the workqueue memory!
Actually insert the delayed work into the workqueue.
Pass the wq to linux_worker as it expects, not NULL.
Make Linux workqueues at IPL_VM for now.
Initialize the workqueue flush structures correctly.
Tweak drm_fb_helper_single_fb_probe so we needn't reconnect the screen.
Avoid dividing by zero when allocating empty array in kcalloc.
Initialize and destroy the pending flip lock.
Detach framebuffer stuff before drm device in i915drm_detach.

Detaching the drm device calls the i915_driver_unload routine, which
nukes the i915 private data structures, so that we can't use them any
more to detach the framebuffer.

Now i915drm2 unloads!
i915_gem_context_close destroys the idr; i915_driver_postclose needn't.
flush_workqueue should work now, so don't work around it i915 unload.
Rewrite idr to use a dumber algorithm that admits pserialized use.

drm2 doesn't use them with RCU, but it does use them under spin locks,
so an rwlock is not kosher.

This algorithm is super-dumb, but the idr API has changed upstream,
and this is not performance-critical, so it's not worth investing
time in a better algorithm at the moment.
Don't put work flush items on the stack; worker kmem_frees them.