Patch Set 2: Looks good to me, but someone else must approve; IP review completed

Splitting up Repository into its generic form and its concrete file based form is harder than it sounds.

I think the easiest approach is to do this step first.  Get the API split into abstract and concrete, then refine from there.

Moving lib.FileRepository to storage.file.FileRepository is a disaster.  We run into all sorts of package visibility issues.  I'd like to do it in smaller increments, after this initial split is done.

This means we'll be breaking our public API at least twice during the 0.9 development cycle, but both times the breakage is mostly limited to the construction of the FileRepository... and the second breakage is just an import statement edit (s/.lib.FileRepository/.storage.file.FileRepository/) and updating META-INF/MANIFEST.MF to export/import that package, and its mostly a mechanical change.