Improve iconv finding for cmake

* add FindIconv helper for CMake iconv detection
* only default using iconv to ON for MacOS
* update pkg-config generation to include iconv dependency better
Merge pull request #1978 from libgit2/rb/cmake-find-iconv

Improve iconv finding for cmake
Fix bug making split deltas a COPIED targets

When FIND_COPIES is used in combination with BREAK_REWRITES for
rename detection, there was a bug where the split MODIFIED delta
was only used as a target for RENAME records and not for COPIED
records.  This fixes that, converting the split into a pair of
DELETED and COPIED deltas when that circumstance arises.
Add GIT_DIFF_FIND_DELETE_UNMODIFIED flag

When doing copy detection, it is often necessary to include
UNMODIFIED records in the git_diff so they are available as source
records for GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED.  Yet in the final
diff, often you will not want to have these UNMODIFIED records.
This adds a flag which marks these UNMODIFIED records for deletion
from the diff list so they will be removed after the rename detect
phase is over.
GIT_DIFF_FIND_REMOVE_UNMODIFIED sounds better
Merge pull request #1979 from libgit2/rb/diff-find-delete-unmod

Add GIT_DIFF_FIND_REMOVE_UNMODIFIED flag and fix copy detection bug
Introduce git_revert to revert a single commit
clean up state metadata more consistently
Updates to cancellation logic during download and indexing of packfile.
Merge pull request #1977 from ethomson/revert

Revert support for a single commit
Merge pull request #1981 from jamill/download_cancel_tweaks

Updates to cancellation logic during download and indexing of packfile.
Include git2/revert.h in git2.h
Merge pull request #1982 from linquize/revert.h

Include git2/revert.h in git2.h
Bare naked merge and rebase
Merge pull request #1983 from ethomson/revert

Bare naked merge and rebase
Reorder var decls in revert test

Oh, MSVC.
Merge pull request #1984 from ethomson/revert_fix

Reorder revert test variable decls