Use a predefined hash of available algorithms

Instead of using `eval` for finding the algorithm, a predefined
algorithm hash will make things easier to control.
Additionally, the ability to inject an alternate algorithm list was
added.
Add error message displaying available algorithms

Visible if user tries to use an unavailable algorithm.
Split feature spec into two
Add acceptance test for length argument