Does not compile, saving WIP for historical reasons
Does not compile, saving WIP for historical reasons

I'm saving these changes to document/remind myself why I'm undoing them.

The issues are:

1. assertions and returning 0 when elem_init fails
2a. Keeping size accurate when a elem_init fails in middle of multiple
insertions.
2b. Shifting contents back to the left when insertion with elem_init
fails

1 only became possible with the addition of a return value to elem_init.
It is a bit of added overhead and code complexity/readability.

An argument against is that I currently *don't* check for the analagous
failure of CVEC_STRDUP in cvector_str.  On the other hand, I know
strings are almost always tiny, meausured in bytes or in extreme cases
KB whereas the user types stored in cvector_void could be allocated
100's of MB or even GB per elem_init call which makes them much more
likely to fail.

I'm on the fence about 1.  I value the consistency between cvector_str
and cvector_void but I feel like the inconsintency is justified.

2 is the reason I'm not finishing my changes.  While nothing in CVector
could ever really be complicated, doing all of 2a and 2b would increase
the ugliness and size of cvector_void (and cvector_str if If I made it
consintent) far in excess of the average for no real gain imo.  For
99.9% of code, a memory allocation error is an indicator of a bug or
miscalculation (ie I really should have closed my 100's of browser tabs
before running this program; of course on Linux you'll just hit swap and
bog down and not actually fail...).  Given this fact, simply reporting
failure from elem_init is sufficient because chance are the programmer
wouldn't bother to handle that gracefully anyway (more than simply
exiting I mean) and might even crash if they aren't checking the return
values.

rswinkle/CVector,rswinkle/CVector,rswinkle/CVector