Adds sliding-window parallelization to Push/Pull operations

A layer can only be pushed/pulled if the layer preceding it by the
length of the push/pull window has been successfully pushed.

An error returned from pushing or pulling any layer will cause the full
operation to be aborted.
Merge pull request #742 from BrianBland/ng-push-pull

Adds sliding-window parallelization to Push/Pull operations