Add `Algorithm.names_of_all_algorithms`

This also necessitated the addition of `Algorithm.name`, which is mostly
used on classes inheriting from Algorithm (`Algorithm.save` returns an
empty string, so not very useful).
Show available algorithms if argument is missing

Previously when the `-a` flag was passed without an argument the
available algorithms weren't shown.
Add top-level documentation to class
Use Algorithm.descendants instead of constant Hash

By using Algorithm.descendants the list of algorithms can grow without
the need for adjusting the constant.
Pass the error messages with the exception

I don't want explicit $stderr access deep down in the internal classes.