When running with INVARIANTS, two major things are done: KASSERTs are
checked and UMA performs memory debugging. The latter consist of two
things: trashing freed memory and checking that allocated memory is
properly trashed, and also of keeping a bitset of freed items.
Trashing/checking creates a lot of CPU cache poisoning, while keeping
debugging bitsets consistent creates a lot of contention on UMA zone
lock(s).
This change allows either to disable UMA debugging with INVARIANTS,
so that only KASSERTs are done. Or to reduce amount of debugging,
e.g. trash/check and track only every N-th item. The N is controled
by a loader tunable. It isn't possible to strictly follow the number,
but still amount of debugging is reduced roughly by (N-1)/N percent.