Undeprecate AsyncIterator.

It was a mistake to deprecate AsyncIterator, as there are cases where its useful. I kind of knew that, and was reminded why when I tried to pull it out.

Delegate more of AsyncIterator to BatchIterator, which eliminated duplicated code. Rewrote the AsyncIterator test and expanded the BatchIterator test. Also cleaned up a few things in the process.

closes #86