Add checks to free() and malloc_usable_size() to
verify (sort of) that the pointers are actually
pointing at valid allocated memory before dereferencing
them and using the chunk_begin struct info.
This will catch use-after-free and wildly bad pointers
a little bit earlier.