Some type tidying.

* Moved the class declarations into `Types.h`
* Wrapped everything in `Types.h` in `extern "C"`.
* Removed usage of the various `ARRAY` defines out of the user-facing
code.
Tweaked array and compound type definitions.

Now they use the definitions of their basic type.
Replaced type defines with typedefs.

Also switched to using stdint types and removed the FLOAT32 define.
Converted API-visible classes to structs.
Merge pull request #12 from WrinklyNinja/macro-replace

Replaced some type definitions.