Initialize algorithms with options hash

Instead of having regular arguments in the `initialize` methods of the
algorithm classes, use an options hash for initialization.

Up until the implementation of TypeableAlgorithm, all algorithms took
the same amount of arguments to instantiate them. Since this is no
longer the case and I want to retain the ability to instantiate all of
them with the same interface, this change is necessary.