Provide situation-useful default solver.

We already scan for what solvers Coopr sees, so go ahead and make use of
that information to choose the default solver.  The assumption is that
if CPlex is available, it's the best.  Then Gurobi.  Then Coin Branch
and Cut (CBC), and finally defaulting to GLPK if none of those exist.
Be a little friendlier about solver existence

Especially for new users: if a solver is not installed, explain as much
and direct them to the Temoa user forum.
NFC: Minor syntax changes inline with Python 3+

For example:

  - raise ValueError, msg
     ->   raise ValueError( msg )
  - "%s some test %d" % (aString, someInt)
     -> "{:s} some test {:d}".format(aString, someInt)

And so on.
Variable renaming (l_per -> p)

A while back we simplified the names from "ell underscore" prefix to the
simpler p, s, d, i, t, v, o.  Just push this change through to
temoa_lib.
Update as per an API change within Coopr.
Introduce TemoaError exceptions

For certain classes of errors, we can be much nicer with the output than
the ugly stack trace that an Exception normally raises.  These are
generally known validation or sanity check errors.

In the case that someone would prefer to instrospect an error with the full stack
trace, I have not yet implemented a command line argument.  However,
they can run the model file directly via something like:

$ coopr_python  temoa_model/temoa_model.py  path/to/dat/file.dat

As opposed to preferred method of:

$ coopr_python  temoa_model/  path/to/dat/file.dat
Sort the solvers when displaying only.

For the command line output from --help, sort what the user sees, rather
than choosing the random ordering provided by Python's set class.  Temoa
still chooses the "best" option based on a hard-coded understanding of
the known solvers and what's available.
Implement Demand distributions.

Rather than forcing the user to manually (or "off-line") calculate the
amount of demand that each period and time-slice requires, this change
allows a simple description of the distribution of an end-use demand
(EUD), and the total amount of EUD per period.

This commit adds these two parameters:

 DemandDefaultDistribution (DDD)
 DemandSpecificDistribution (DSD)

Parameter DDD is indexed by time slice (season, time of day), and
specifies the default distribution of all EUDs.  It is optional.  If a
user does not specify it, then it defaults per time slice to the
same values as SegFrac.

DDD is also partially specifiable.  That is, if a modeler would only like
to specify a subset of the time slices for EUD distribution, then so
long as the final accounting of DDD sums to 1, this is legal:

param  SegFrac  :=
 winter  day    0.2
 winter  night  0.3
 summer  day    0.3
 summer  night  0.2
	;

param  DemandDefaultDistribution  :=
 winter  day    0.4
 winter  night  0.1
	;

Temoa will automatically fill in the missing values for (summer, day)
and (summer, night) with 0.3 and 0.2, and the sum will be 1 (100% of the
time of a year).

For EUDs that do not follow the standard distribution, there is
DemandSpecificDistribution.  DSD has a third index of commodity_demand.
Like DDD, DSD is optional.  Unlike DDD, however, DSD does not allow
partial specification.  If a modeler specifies DSD for any time slice,
then the modeler must specify the DSD for all time slices.  Note that
this does mean that an EUD must be used in all time slices, just that
the modeler must ensure that the sum of all fractions of a year
specified in DSD for a particular EUD sums to 1.  For example, using the
above definition of 4 time slices (winter/summer, day/night), a modeler
might specify that heating demand is distributed only in the winter
with:

param  DemandSpecificDistribution  :=
 winter  day    heating  0.7
 winter  night  heating  0.3
	;

However, the following is not valid (because the modeler has not
specified 100% allocation of distribution), and Temoa will complain:

param  DemandSpecificDistribution  :=
 summer  day  cooling  0.6
	;

Note that for ease of typing, and respecting the 80-column width, the
code sometimes references these as DDD and DSD with

 DDD = M.DemandDefaultDistribution
 DSD = M.DemandSpecificDistribution

 # now DDD and DSD can be used in place of the longer names
removed extra spaces and changed tabs to 4 spaces to conform to PEP 8