modify.revert_to_revsible handles unsolved model

Previously, cobra.manipulation.modify.revert_to_reversible assumed the
model had been optimized as an irreversible model, and would fail if
optimize had not been called, or had been called when the model was
reversible.

This fixes #122
Deletion worker detects errors

If the solver crashes or fails, even when in a separate thread, an
exception is raised instead of using "0" as the value
deletion of 0 flux reactions already known

If an optimal solution has 0 flux through the target deletions, then the
objective value will not change by constraining those reactions to 0.
Using set operations, cobra can avoid sending these cases to the lp
solver and use the known wild-type objective value.
Add ability to compile gene_reaction_rule

For most gene reaction rules, compiling the string allows a direct eval
using a substitution dict to desribe the activation state of the genes
allows for much faster computation than using regular expressions and
string manipulations to transform the expression to a satement without
substitutions.

This enables detecting and using gene_reaction_rules which can be
compiled. This is now done by default for double gene deletions.
add optional progressbar to double deletions

uses the IProgress package