Display available algorithms if `-a` flag is provided without argument

This is a follow-up to #29, where I decided I wanted to pursue an alternate implementation of the problem of displaying all available algorithms.

I ended up going for adding a base class for algorithms (`Algorithm`) and add the `Class#descendants` method.
By having all the algorithms inherit from `Algorithm`, getting a list of all the available algorithms turned into an easy task. With that said, a bunch of code needed to be rewritten to accommodate for this change.

Closes #28.