Major updates to C interface.
Previous implementation of C interface passed raw pointers up to user and it was unclear and inconsistent who owned the pointer leading to bugs. The previous implementation lead to creation of many copy constructors, many of which had bugs. Now we pass opaque pointers to C which the user is *always* responsible for freeing. Remove broken copy constructors. Update C tests so that all pass valgrind memory leak checks.
Showing with 4572 additions and 5748 deletions