Change how popen3 is called in Executable

Calling popen3 in the format of popen3(a, b, c...) requires all the
arguments in the argument string to be separated and into an array and
then splatted. This wasn't caught previously because only acceptance
tests use the Executable helper and none of them used a valid argument
string (tests were only made for invalid strings and empty strings).

Invoking popen3 with only one string containing both binary and
arguments, then everything is split correctly.

Also use a private reader instead of evaluating the instance variable.
Add algorithm flag to ArgumentParser

AlgorithmFinder class not implemented in this commit.
Add AlgorithmFinder class
Split feature spec into two
Add acceptance test for length argument
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.