Improving the Parameter class.

Initially we were thinking it might be a good idea to erase the
types from the Parameter class because it will return primitive
types and vectors of them.

However this leads to a lot of reinterpret_casts to get the type
back after we finish passing the data in a type erased fashion.

It's mostly that this is unsafe as well as verbose.

So the Parameter class is now a provider of interfaces.
It will give you int, float, or string interfaces to actually
access and set the data. These interface are templated on primitive types.
If you just need the sizing/geometry configuration of the parameter
you can request the TuplesGeo interface. This interface is
not typed on primitive data types.

I think think this gives us a nice balance between compile time
and run time type checking.  Having everything done at compile time
leads to some verbose template code.