Update revision command.

It amounts to the same thing.  However, I'd "already solved this
problem" in a different script (deploy_website).  So I use the solution
from there.  In fact, this script is the correct place for the
versioning information.
Spelling does not produce any targets.
Re-enable spelling; swith to MathJax.
Use date instead of release number.

Since we don't have version numbers, just release dates, use the date
instead.
Fix spelling.  Pretty good for having had no spellchecker!

Also, incorporate some words in the .. spelling:: section that are not
there by default.
Simplify LP file logic.

From the modeler's perspective, I believe the only reason they'll want
to look at an LP file is for edification or to make sure the model is
doing what they think it's doing.  There's thus no need to give the
modeler the option to use symbolic solver labels, which is a gritty
detail of Coopr.  Thus, hide that fact: if the user requests to see the
LP files, use symbolic labels.  Full stop.
Fix obvious error.

Coopr uses random file names for it's temporaries, a correct procedure.
The naming documentation was just a copy/paste error on my part when I
first implemented that feature.
Add note for GLPK specific flag
Fix command line flag.

Fixes #37 "'keep_coopr_lp_file' flag broken"

Silly Coopr API churn.
NFC: move comments to appropriate locations
Use enumerate more effectively.

There's no need to manually update lineno here: the only reason we're
enumerating is to be user-friendly in case of an error.  So, just make
the line counter 1-based to begin-with.
Relocate exception code to closer to problem area.

The diff is all-over the place, but the only change is moving the
except: clause much closer to the potential problem code.  The rest is
just unindentation.
Alter if-statement and unindent following code.

if match: -> if not match: continue

This change allows the rest of the loop to be unindented a bit.  Nothing
functional has changed
Fully use regex.

We're already using regular expressions, so just use them to parse each
line.  This elides the need for the slightly uglier (if slightly faster)
code to parse the variable group and variable index via the crude
.split() function.
Fix #38 "Duplicate variable in output: ActivityByPeriodAndProcess"
Fix floating point issue.

The old iteration of the algorithm attempted to calculate the number of
characters in the fractional portion of a number with this idiom:

    numChars = len(str(abs(val - int(val))))

Unfortunately, for something like 1.000000000004, this results in the
fractional part being:

    >>> 1.000000000004 - 1
    3.999911513119514e-12

This is correct for the numChars, but not correct when we later print it
out, because  1.000000000004 turns into 1.999911513119514e-12, which is
not correct.  This new algorithm splits on the decimal of the entire
string, which should correct this bug.