Significant update to read-based mode

This commit adds an "alignemnt cache" feature to the read-based mode
of salmon.  Essentially, until the required number of observations
have been made, all of the computed alignments are serialized to a
temporary file that we call the alignment cache.  If we reach the
end of the input data before observing the required number of reads,
instead of reading through the raw input data again, we simply continue
iterating over the alignment cache until we see the required number
of observations.

This substantially speeds up salmon for smaller read libraries, as
the "mapping" computations only need to be done once and passing
over the alignment cache is very fast.  It also makes it possible
to properly handle named-pipes that provide read libraries smaller
than the required observation size.  Previously, salmon would attempt
to re-read the named-pipe, realize it's not a regular file, output
the current estimates and complain.  Now, however, any subsequent
passes over the data use the alignment cache, which is a regular
file and can be read multiple times.

If and when salmon realizes that the cache won't be needed (when
the number of observations exceeds what is required), it stops writing
to the alignment cache.  This ensures that the temporary file will
never grow too large and inhibit scalability to truly huge read sets.

The one downside to this feature is that it introduces a pair of
concurrent queues through which the alignment groups (groups of all
valid alignments for a single read) are passed.  The leads to a
very small ~5%, but measurable decrease in performance over the
previous implementation.  It may be possible to reclaim this performance
when the cache is not being written by dynamically swapping out
the function that's processing the reads, but it's unclear right
now whether or not that level of complexity is necessary (or
desirable).