Patch Set 1:

This is RFC-ish.  It seems fine, but the real reason I want to do this is to support storage on a non-filesystem.  Until I have a PackParser implementation that does that, I'm not convinced we should submit this refactoring.