This stream_thunk function gets called a whole lot with very small sizes (i.e. less than 50 bytes). I wonder if it makes sense for performance reasons to have a byte threshold that must be reached (# of bytes accumulated since the last time we raised the event), such as 65536? Then you would need to raise the event again one last time (potentially) in `git_smart__push` after the call to `git_packbuilder_foreach` finishes. Otherwise we are going to spend a tremendous amount of time in native->managed transitions in our Visual Studio tools just doing progress reporting (yep, i'm another 4 bytes along!)