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. We were only firing of the progress callback for fetch operations.

I've also fixed a leak here if you return ```< 0``` in the callback (and cleaned it up a little) and made it only not fire any more callbacks of that type if you return ```< 0```. I don't think that on receiving a text message from the remote should allow you to cancel the operation. Normally if the operation should not succeed, the remote side will anyway force failure (cancellation) by not allowing the push/fetch to continue.