fix bug in mat->sbml translation

Reading in a mat model did not set the compartment, and writing an SBML
model would fail if compartment was None, causing the following code to
error out:

```
>>> import cobra.test
>>> cobra.io.write_sbml_model(cobra.io.load_matlab_model(cobra.test.ecoli_mat,
    "test.xml")
```

This commit fixes both issues and adds a unit test to ensure all model
loaders appropriately set the compartment.
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.