The big thing was the unnecessary kref on the alloc. Due to that, we had
the weird alloc_get helper, which either got a ref or dropped it. We don't
need any of that, and it confuses things.

The one important thing is to use a qlock to avoid a deadlock. Deadlock is
the likely reason for the kref in the first place, but it was just
unnecessary.

I cleaned up a couple other things: the dealloc funcs don't allow you to
pass in 0. No one was doing it, and allowing it makes it seems like we
wanted to have that be an option. perf_alloc_status was renamed. It had
nothing to do with "struct perf_alloc". It was trying to get a new status
(a.k.a. to alloc()). perfmon_install_session_alloc() was needlessly
clever, and the errors() we throw now have real error messages.