Allow lists to be specified in arguments.

Lists can be specified at a fixed size using std::array<T, N> or a
dynamic size with std::vector<T>. At the moment using a dynamic size
is a bad idea(tm) because it has the ability to consume all positional
arguments. Of course, using -- will fix this problem.
Switch from public fields to named parameter idiom/fluent interface.

Decided to hide the name option_base since the client code doesn't
need to be aware of it. The base class only allows retrieval while
the derived option<T> class handles the setting of the value.
Change argument_parser API to be more like optparse's action API.
Change parsing scheme to be more POSIX-like.

Add more errors and remove noexcept-ness of the constructors as the
string constructor and appending can possibly throw.