Avoid null pointer dereference to implement container_of

Using offsetof instead of actually dereferencing a 0 pointer is still
standards compliant (works under gcc -ansi, clang -ansi), and is more in
line with how Linux kernel defines this macro (kernel.h). Can't exactly
lift the kernel implementation because it uses gnu-extension typeof.

Not really a necessary change, but it was causing clang's address
sanitizer to complain.