Rename public interface methods to avoid two overloaded methods with the same name

This is required to make the order in the C++ virtual table
consistent in MSVC - previously the overloaded methods were
ordered differently in the vtable compared to the interface
declaration.
Add a public C API to the library

Add a struct that matches the C++ interface vtable.

This requires that the C++ interface methods are declared to use
the same calling convention as normal C functions, and that the
C struct exactly matches the layout and ordering of the C++
virtual table - MSVC seemed to reorder methods if there were
overloaded methods.
Merge pull request #184 from mstorsjo/c-interface-vtbl

Add a public C API to the library by mimicking the C++ ABI with a C struct