In general we don't encourage `null` since it's likely to get managed
`ArgumentNullException` which cannot be well handled on the ObjC side.
That's covered by:
> NS_ASSUME_NONNULL_BEGIN
Right now we lack any metadata to make this more precise :-(. However,
when possible, we can put specific annotations on some API, e.g.
1. Any managed exception in a `.ctor` (or the `.cctor`) will make the
corresponding `init*` method return `nil`, so we always mark them as
`nullable`.
2. `ref` and `out` on reference types can be `nullable`
3. Our custom support for `IComparable` and `IComparable<T>` is null safe
so mark it as such;
Warnings from our unit tests, which abuse `nil` since it knows the
managed code internals, now ignore those warnings (pragma)