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...
I can do that. I think at the time I was writing it I felt like it was weird to mix the policy of the marshaler itself (its "Lax-ness") with what I was doing here, which doesn't have anything to do with the marshaler's policy other than its choice of an encoding.