network cancellation improvements

This PR consists of:

- Adding support for cancellation during push
    - Various other tweaks to support this and other error handling issues found along the way
- Fix to the online push tests. These tests are still broken until #1853 is merged.


The changes for cancellation include:
- Support cancellation during push operation
    - During object counting phase
    - During network transfer phase
        - Propagate GIT_EUSER error code out to caller
- Improve cancellation support during fetch
    - Handle cancellation request during network transfer phase
    - Clear error string when cancelled during indexing
- Fix error handling in git_smart__download_pack

Cancellation during push is still only handled in the pack building and
network transfer stages of push (and not during packbuilding).