Rework error handling to turn errors into smarter nested tuples

* `{error, "Arbitrary string"}` becomes `{error, {atom(), term()}}`
* `{error, [error()]}` becomes `{errorlist, [error()]}`
* Add `cuttlefish_error:xlate/1` to take new error tuples and convert to (roughly) same strings as before
* Simplify `cuttlefish_bytesize:parse/1`
* General -spec cleanup

API change
--
* Remove `cuttlefish_error:format`, used nowhere
Why "float" as a string instead of an atom here?