pool: Create exceptions for pool operations

Create separate exceptions for pool and index failures.  Allows
internal and external code to handle failures appropriately.
pool: Implement index recovery

Add a static method to attempt to recover the index for a given pool.
This is intended to be run manually and explicitly.  It will
regenerate any index files that don't match the size of the associated
pool file.

Implemented with a private constructor taking a recovery argument.  If
run in recovery mode, the pool should not be used after the recovery
is performed.