Guard against marshaling invalid handle as GitOid

Related: https://bugzilla.xamarin.com/show_bug.cgi?id=11417
Move directory-aware Touch() up into BaseFixture
Support additional paths with temp clone
Add submodule test repo
Add Submodule bindings
Add SubmoduleLazyGroup
Add Repository.Submodules

Includes submodule support in Index.Stage() to fix #220