Had a "Come to Jesus" meeting on how the C object model is organized...

The C classes now have a "public interface" structure that is defined in the header while the implementation structure was moved to the c file.
This allows me to be a little more free with what I put in the implementation structure since its "out of sight, out of mind" for users.

All of the "implementation" methods were removed from the header and made static in the implementation file.
Now all interactions with the ArrayList must be done via the function pointers.
This gives me a bit more power with changing the implementation without breaking any outside code.

To promote slightly better unit testing, I added a getCapacity method to the C ArrayList.
Need to do the same for the C++ class.
I didn't want to do this before...but what the hell...that state could be useful to a user in a read-only fashion.

Not using github issue linking yet due to this being an uber waterfall commit...I will try to be more agile in the future :(

Issue 12:
Due to the object model changes, I was able to add the configuration values back to the implementation structure.

Issue 11:
My "solution" to this problem is to just nuke the defines entirely and hardcode the constants in the createDefault methods.
It just makes more sense that way...still glad I poked around with the define tech though.
I still need to do this for the C++ classes.

Issue 1:
Added a few remove tests but I am not finished.