Further speedups and improvements to double deletions

The following changes are made:
 - Errors while performing double deletions no longer silently result in 0 values.
 - No longer solve a linear program when all reactions removed carry no flux in the optimal solution
 - Compiling gene_reaction_rule strings results in faster determination of deleted reactions upon gene knockout.