status: fix handling of filenames with special prefixes

Fix libgit2/libgit2sharp#379
Introduce git_reference_shorthand

Generate a shorthand name out of the full refname.
merge setup
introduce git_conflict_iterator
Add git_oid_nfmt - a flexible OID formatter

I frequently want to the the first N digits of an OID formatted
as a string and I'd like it to be efficient.  This function makes
that easy and I could rewrite the OID formatters in terms of it.
Add git_diff_print_raw printing helper

Makes it easier to emulate the --raw option
Fix delta compare to use correct pathname

The delta cmp function needs to choose the correct path for
ordering when a delta is ADDED, RENAMED, or COPIED.
Fix issues with git_diff_find_similar

There are a number of bugs in the rename code that only were
obvious when I started testing it against large old repos with
more complex patterns.  (The code to do that testing is not ready
to merge with libgit2, but I do plan to add more thorough tests.)

This contains a significant number of changes and also tweaks the
public API slightly to make emulating core git easier.

Most notably, this separates the GIT_DIFF_FIND_AND_BREAK_REWRITES
flag into FIND_REWRITES (which adds a self-similarity score to
every modified file) and BREAK_REWRITES (which splits the modified
deltas into add/remove pairs in the diff list).  When you do a raw
output of core git, rewrites show up as M090 or such, not at A and
D output, so I wanted to be able to emulate that.

Publicly, this also changes the flags to be uint16_t since we
don't need values out of that range.

Internally, this contains significant changes from a number of
small bug fixes (like using the wrong side of the diff to decide
if the object could be found in the ODB vs the workdir) to larger
issues about which files can and should be compared and how the
various edge cases of similarity scores should be treated.

Honestly, I don't think this is the last update that will have to
be made to this code, but I think this moves us closer to correct
behavior and I tried to document the code so it would be easier
to follow..
Extend diff example

Add --raw output format and (some) options to invoke rename/copy
detection on the diff.
Initialize loose_deleted before it is used for a check later on.
More git_diff_find_similar improvements

- Add new GIT_DIFF_FIND_EXACT_MATCH_ONLY flag to do similarity
  matching without using the similarity metric (i.e. only compare
  the SHA).
- Clean up the similarity measurement code to more rigorously
  distinguish between files that are not similar and files that
  are not comparable (previously, a 0 could either mean that the
  files could not be compared or that they were totally different)
- When splitting a MODIFIED file into a DELETE/ADD pair, actually
  make a DELETED/UNTRACKED pair if the right side of the diff is
  from the working directory.  This prevents an odd mix of ADDED
  and UNTRACKED files on workdir diffs.
Add more diff rename detection tests

This adds a bunch more rename detection tests including checks
vs the working directory, the new exact match options, some more
whitespace variants, etc.

This also adds a git_futils_writebuffer helper function and uses
it in checkout.  This is mainly added because I wanted an easy
way to write out a git_buf to disk inside my test code.
Merge pull request #1596 from grimreaper/development

Initialize loose_deleted before it is used for a check later on.
define "long name" in git_reference_name_to_id
refs: export the glob iterator
Merge pull request #1597 from zodiac/patch-1

define "long name" in git_reference_name_to_id
tag: Introduce git_tag_annotation_create()
Merge pull request #1594 from nulltoken/topic/tag_annotation

tag: Introduce git_tag_annotation_create()
cmake: Fix indentation
cmake: Update Windows resources to reflect the optional vendor string

Make InternalName and OriginalFilename resources reflect the name of the compiled binary.