(PUP-2906) Optimize and clean up code

Use the benchmark to track down and fix some code that could be
optimized to make collection faster. Additionally clean up the
code for collectors and add some YARD documentation for the API.