Add Intrinsics.areEqual()

It's more safe, short and less error-prone (especially w.r.t. nullability of
generic types)
Fix generic data class hashCode for null

Null may come from everywhere, so we always check for it (when the property's
type is not primitive)
Fix elvis expression in case of nullable generic
Fix codegen of as-casts for nullable generics
Fix codegen of !! for nullable generics
Fix safe calls codegen for nullable generic