Custom implementation of DirectoryFlatClasspath.

Instead of delegating to AbstractFile and going through many
layers of indirection just work with java.io.File directly.
Support for jar and zip files on classpath.
Introduce FlatClasspath.list method.

It allows to scan given package in one pass which comes very handy
when we list ClasspathEntries in a directory.

The implementation in PackageLoaderUsingFlatClasspath is a big
involved because of irregularity related to empty package.
Long-term, those special cases should be removed or handled somewhere
else.

Also, in DirectoryFlatClasspath switched to constructing PlainFile
directly in order to avoid expensive `isFile` call.
Make all classpaths lazy vals in SymbolTableForUnitTesting.

There was an embarrassing bug where classpath would be reevaluated
multiple times per symbol table instance. I didn't notice this before
because when there's so much laziness around it's really hard to get
any performance accounting right.
Switch to ZipFileIndexFlatClasspath implementation.

Also, added a comment which shows how to disable ZipFileIndex caching.