Teach Index.Stage to stage files in ignored dirs

If a directory is ignored and you attempt to stage
a file beneath that directory, the file is not
staged.  By having diff return files beneath that
ignored dir, we can add that file.
Add Config.GetValueOrDefault() extensions
Override Signature.ToString()
Clean up reflog assertions
Committish has two t's
Append to reflog in Branches.Add() and Move()
Respect core.logAllRefUpdates