Cython guard against [c|m|re]alloc failures
Not sure if these are testable but in the case of the system being exhausted for resources these should explicitly throw a MemoryError instead of allow undefined behavior

@MarcoGorelli don't know how difficult it would be but would be cool to have the cython linter catch uses of any low-level allocation function and ensure that a guard against NULL comes thereafter. The only exception I could think of to that rule is if you are immediately returning the result of an malloc and expect the caller to guard against NULL, but we don't have any instances of that in our code base (may also not matter for Cython)
Thanks @WillAyd 