Add a bunch of stuffs to Index.Remove()

With this PR, it is now possible to:
- [x]  Pass `ExplicitPathsOptions` to `Index.Remove()`
- [x] Remove whole folders from the index
- [x] Remove files/folders from the index without removing them from the workdir (`git rm --cached`)
- [x] Clear conflicts state when removing entries from the index

This fixes #270 and #327.

Please note that the behavior is now consistent with `Index.Stage()/Unstage()`:
- passing pathspecs which don't match any files does **not** throw anymore.
- passing explicit paths (by passing a non-null `ExplicitPathsOptions`) which don't match any files **will** throw.

This is a breaking change.