Merge branch '26-hide-implementation-of-api-types-behind-opaque-types' into 'main'
Resolve "Hide implementation of API types behind opaque types" This MR implements creation and destruction functions for most library types the fields of which should not be directly accessed by clients. It also moves the type definitions to their own `types.h` header. Closes #26 See merge request !17