There should be a more convenient way to free data after it's removed from a container and
it should be:
- an optional operation
- should not assume the same allocators are used for both data and the structure
I suggest adding a callback to remove type functions so that instead of:
void *e;
container_remove_at(c, 3, &e);
free(e);
we could write something like this:
container_remove_at(c, 3, NULL, free);