Make stash and checkout ignore contained repos

Fix for #2240 

To emulate git, stash should not remove untracked git repositories inside the parent repo, and checkout's `REMOVE_UNTRACKED` and `REMOVE_IGNORED` options should also skip over these items.

`git stash` actually prints a warning message for these items. That should be possible with a checkout notify callback if you wanted to, although it would require a bit of extra logic as things are at the moment.