Use autoloading for most Ruby classes/modules

We used to use autoloading pervasively up until 0387f20d60a4671a4, where
we removed it because of compatibility problems across different
versions of Ruby on different platforms (specifically, the behavior when
autoloading classes provided by C extensions was divergent across
platforms and Ruby versions).

This commit goes back to using autoloading, but this time only for
classes and modules outside the C extension.

- moved `Finder` subclasses into `Finder` namespace (ie. `BufferFinder`
  becomes `Finder::BufferFinder` etc) and `Scanner` subclasses into
  `Scanner` namespace (ie. `BufferScanner` -> `Scanner::BufferScanner`);
  is more verbose but allows us to push the corresponding autoload
  directives down a layer, keeping the top level `CommandT` module small
- extract `FileLimitExceeded` exception class out into its own file, so
  it too can be autoloaded

Overall, this makes our `require` statements much simpler and will make
it much less likely that we require things that we don't need in the
future.

Note that the changes in namespacing make this diff look bigger than it
really is; view with `git show -b` or similar to see what really changed
(ie. ignoring whitespace).