This is a more significant refactoring than uma_zalloc_arg() because it was in worse shape. We only need the zone lock if we're going to cache a bucket. The crossdomain logic really needed to be simplified and merged with the other case. Fundamentally we're just freeing a bucket and allocating a bucket, no matter which bucket that is.