Handling typenames for classes and structs

- Adds "string" as a class name if #include <string>
- Does not handle typedefs
Allowing NULL destroy function

For the case of wanting to destroy a list but not its contents (say
they're still used elsewhere).
Destroying typenames list