Refactor ProgramInfo use

Instead of having ProgramInfo in src/gromacs/utility/, declare only
a program context interface there, and provide simple setters and
accessors for it.  Move all the logic related to actually providing the
values (in particular, the location of the binary) into
src/gromacs/commandline/, which provides an implementation for the new
interface.

This provides two main benefits:
 - The responsibilities of the different modules are clearer, and there
   is no complex logic related to command line programs in the
   bottom layer.
 - The API provided for external code for initializing the library is a
   lot cleaner.  They can either choose to use all the command line
   logic by using gmx::initForCommandLine(), or provide their own
   implementation for the program context, and set it directly with
   gmx::setProgramContext().

Thread safety guarantees have changed somewhat; the implementation is
much simpler this way, and I don't think we need to be 100% thread safe
in methods such as setProgramContext() (gmx::init() isn't, either).

Change-Id: I2b89aeb3833e7e40e5dd2322745efbc44581e15b