Derive Macros

Derive macro to simplify error type implementation. Implements std::fmt::Display, std::error::Error for the derived Type.