Generic PlatformAdaptationLayer

Refactoring `PlatformAdaptationLayer` to be a generic type so that globbing can be performed on a namespace of any type as long as there is a notion of directories/containers & files/items. The default implementation now specializes over `FileSystemInfo` rather than strings, making usage more efficient when working with large files (e.g. don't have to go and get attributes separately for further filtering of hidden files). This also enables unit tests to also fake `PlatformAdaptationLayer` over a test hierarchy.