Refactor juju/errors to not rely on juju/errgo

As discussed previously, this branch removes the dependency on juju/errgo.

Instead of wrapping the errgo.Err struct and changing the behaviour of the methods, instead we have duplicated the linked list style errors of errgo, but the errors.Err struct hides the internals only exposing the values through methods.

A Mask function is added to provide the same behaviour as the errgo.Mask function which keeps the error stack, but hides the underlying type information of the error.  The existing Maskf and Contextf functions have been joined to DeferredAnnotatef, as all the call sites of those methods were just adding annotations.
"like the `os` package uses."
or
"like is used by the `os` package."
or similar