A kernel object ID of 0 is reserved as a sentinel value that will never point to a real kernel object. It is
used to mark things like the owner of a kernel object being the kernel itself.
This trait should be implemented by all types that implement kernel objects, and allows common code to
be generic over all kernel objects. Kernel objects are generally handled as Arc<T> where T is the type
implementing KernelObject, and so interior mutability should be used for data that needs to be mutable within
the kernel object.