We have two impl blocks for `Error`, just squash them together into a single one.
Move error code to a private `error` submodule and re-export it at the crate root. (Puts private `sealed` module at the bottom of the file i.e., this patch is strictly a code move but we re-order the code while moving it.)