Use an optimized read loop for non-context code

The old loop did all sorts of checking for context stuff even
if you weren't dealing with context.  I added a "go faster" version
for the more common case of not using context.
Inline iterate for printing simple matches

Unfortunately, as nice as abstraction as it is, for performance reasons,
iterate() must die.  This is step #1, and it should be the most common
case.
Return 0 (for # matches) if we can't read a file