Reflog entries can't be >1 line

Fix #408
Insert new reflog entry on merge commit
Add RemoveFromIndexException
Make Index.Remove() diff-based

Note: it means that the paths passed to Remove() are pathspecs, and thus behavior has been aligned with Stage()/Unstage() => calling Remove() by passing a pathspec which doesn't match any paths doesn't throw anymore (breaking change).
Allow passing ExplicitPathsOptions to Index.Remove()

This makes the behavior fully consistent with Index.Stage()/Unstage().
Make Index.Remove() able to remove folders

Fixes #327
Make Index.Remove() able to remove only from index

Fixes #270
Improve support for git rm --cached semantics

Lots of test cases added, to mimic git rm --cached behavior.
Move Index.Remove() tests to a separate file
Switch internal implementation of Index.Remove() to git_index_remove_bypath()
Cleanup ConflictFixture
Add BaseFixture.CloneMergedTestRepo()
Add test to ensure conflicts are cleared when calling Index.Remove()

Beware, this is supported only for files which exist in the workdir (cf. comment in code).
Partially fixes #325