Refactoring: error handling and other minor stuff

Improved the errs package to provide some useful functions and
refactored the command that are being used to reflect the change.

In general an error as specified in the errs package consists of three
things: a task that failed (string name), the relevant error object, and
optionally a hint, which describes the error in more details. In can be
the error output in case a process exits with a non-zero exit status.

Now, there error objects, errs.Error namely, can be nested. Since Error
implementes error and Error.Err is an error. The functions that format
and print the error objects were modified to recursively descent into
Error.err as long as the type cast to errs.Error is successful. This
means that when Error.Log is called, the whole stack of errors is
printed to the user.

Considering the command refactoring, it is mostly about dumping
handleError functions, simply returning errs.Error instead. The returned
error is then processed on the top level by errs.Fatal, which unveils
the error stack if possible (the error returned is actually an
errs.Error) and exits with a non-zero exit status.

Story-Id: SF-9
Change-Id: 51b06e0b36