praefect: Discern storage and datastore-level errors
Refactor Praefect to discern storage and datastore-level error types so that we have more wiggle room inside of Praefect. The final translation of errors is then done in a central location in the coordinator.
This is the final MR before we can unify Gitaly and Praefect errors.
Edited by Patrick Steinhardt