Refactor crawler

`gray-crawler` can now easily and generically support other file systems with implementation of three functions:

1. `probe` -- used to determine if the file system is present in an active partition
2. `serialize` -- used to serialize a present file system in an active partition
3. `cleanup` -- used to clean up any state setup by probe

Many other refactorings were also done to cleanup the code and separation between operations inside the core `gray-crawler` logic.