Definition of the Error trait and error handling related types to make error handling more convinient.
This is some kind of the duplicate of the rust ``std::error::*`` stuff which does not work in ``#![no_std]``
environments. However, it is assumed that if this crate is used as a dependencie there will be an allocator
provided when building the final binary.