Fire progress callbacks also for pushes.

It's not very useful to only know that a pre-receive hook has declined
a push, you probably want to know why.
Check the return codes of remote callbacks.

The user may have requested that the operation be cancelled.
Rename progress callback to sideband_progress
Don't redefine the same callback types, their signatures may change
It is safe to free() a NULL pointer
Correct argument order of git__calloc()
Fire update_tips callback also for pushes.
Verify update_tips callbacks in push test cases
Make stash and checkout ignore contained repos

To emulate git, stash should not remove untracked git repositories
inside the parent repo, and checkout's REMOVE_UNTRACKED should
also skip over these items.

`git stash` actually prints a warning message for these items.
That should be possible with a checkout notify callback if you
wanted to, although it would require a bit of extra logic as things
are at the moment.
Failing test for stashing a buried ignored file
Make checkout match diff for untracked/ignored dir

When diff finds an untracked directory, it emulates Git behavior
by looking inside the directory to see if there are any untracked
items inside it. If there are only ignored items inside the dir,
then diff considers it ignored, even if there is no direct ignore
rule for it.

Checkout was not copying this behavior - when it found an untracked
directory, it just treated it as untracked.  Unfortunately, when
combined with GIT_CHECKOUT_REMOVE_UNTRACKED, this made is seem that
checkout (and stash, which uses checkout) was removing ignored
items when you had only asked it to remove untracked ones.

This commit moves the logic for advancing past an untracked dir
while scanning for non-ignored items into an iterator helper fn,
and uses that for both diff and checkout.
Treat ignored, empty, and untracked dirs different

In the iterator, distinguish between ignores and empty directories
so that diff and status can ignore empty directories, but checkout
and stash can treat them as untracked items.
Handle explicitly ignored dir slightly differently

When considering status of untracked directories, if we find an
explicitly ignored item, even if it is a directory, treat the
parent as an IGNORED item.  It was accidentally being treated as
an EMPTY item because we were not looking into the ignored subdir.
Test decomposed unicode renames work as expected
Test toggling core.precomposeunicode yields rename

There is an interesting difference with core Git here, though.
Because libgit2 will do rename detection with the working directory,
in the last case where the HEAD and the working directory both
have the decomposed data and the index has the composed data, we
generate a single status record with two renames whereas Git will
generate one rename (head to index) and one untracked file.
Improve docs for status rename detection limits

and make tests empty on platforms without iconv support.
Merge pull request #2241 from libgit2/rb/stash-skip-submodules

Improve stash and checkout for ignored + untracked items
Merge pull request #2297 from libgit2/rb/status-with-precomposed-changes

Improve test coverage of status with different core.precomposeunicode settings
Merge pull request #2284 from jacquesg/push-progress-callback

Fire progress and update tips callbacks also for pushes.