git_strarray marshaling improvements

I noticed that `GitStrArrayOut`'s `Dispose` method was implemented incorrectly -- fixing that led me down this path towards trying to unify our `GitStrArray` types and clean things up. We still end up with two different types, `GitStrArrayManaged` and `GitStrArrayNative`, which correspond to the old In and Out types, respectively. But this PR switches to structs, gives a bit more code re-use, fixes some bugs, and manages to eliminate the `UnSafeNativeMethods` class entirely!

I'm eager to get the Mono results...
@phkelley How about adding a `Reset()` (for lack of a better name) method and changing the code to `Array.Reset()` to make this more explicit to the reader?