Add <NSObject> methods, optimize GTOID, use objc_returns_inner_pointer attribute

This PR includes a few things:

 * Optimized `GTOID` to avoid some unnecessary allocations, and added unit tests.
 * Added (variously) `-description`, `-isEqual:`, and `-hash` to `GTOID`, `GTReference`, `GTSignature`, `GTSubmodule`, and unit tested them.
 * Added `__attribute__((objc_returns_inner_pointer))` to all public accessors to underlying libgit2 objects. This ensures that ARC will [keep the parent object alive](http://clang.llvm.org/docs/AutomaticReferenceCounting.html#interior-pointers), instead of assuming that the object is dead after the last direct reference to it.