Improve the error model

It's not always possible (or preferred) to deduce exactly what went wrong with a plain old string error. libgit2 can provide the error class and error code in addition to an error message.

* Implement a first class error object that captures the error code, class and message.
* Overload the ```""``` operator to print the error message so existing code just works
* Expose the error code and error class constants to the user