Make the error types more granular
Also, take care to preserve the information about the error. The error structure has been decided on fairly arbitrary.
For non-enum errors I largely strived to ensure we don't leak out the information about the underlying type in many cases so that the error could later be converted to an enum or evolved in some other way.
This is an API-breaking change, but is also intended to be non-functional.
Kinda Fixes #45.
Edited by Simonas Kazlauskas