More performance improvements

This reorganizes how we compute the derivatives for delta.  Instead generating the sets of variables at the level of polynomials (and sometimes wasting *a lot* of time going through all the monomials whose derivative is 0), we do everything at the level of monomials.  This should basically remove the performance bottleneck of computing delta (especially for things like ```NLP_test3.g```).

As far as I can see, this is safe because derivative of a sum is a sum of derivatives and we have distributivity (I've also run tests and all the results are the same).  That being said, it's probably a good idea if you have a closer look at it.

Let me know if you have any comments!