Here's an example of decomposing exponentials...
```
In [25]: collect(1+exp(x/2), exp(x/3))
Out[25]: 
   ___  
  ╱  x     
╲╱  ℯ      + 1
```
This is useful in some contexts probably, but not here for ODEs.

Here's an example for how collects applied in different orders lead to different constant simplifications.
```
In [19]: sol = C2*exp(x/3) + C4*exp(-x) + C6*x*exp(-x) - x**3*exp(-x)/24 - 3*x**2*exp(-x)/32 - x - 9*x*exp(-x)/64 - 1 - 27*exp(-x)/256

In [20]: print collect(collect(sol, x*exp(-x)), exp(-x))
C2*exp(x)**(1/3) - x + (C4 - x**3/24 - 3*x**2/32 + x*(C6 - 9/64) - 27/256)*exp(-x) - 1

In [21]: print collect(collect(sol, exp(-x)), x*exp(-x) )
C2*exp(x)**(1/3) - x + (C4 + C6*x - x**3/24 - 3*x**2/32 - 9*x/64 - 27/256)*exp(-x) - 1
```

In the first case, C6 easily absorbs the constant term, but in the second, things aren't grouped correctly to enable absorbtion.  The list that specifies the order of collection seems to change order under different run conditions, introducing a random component to the results.  The sort/reverse trick I implemented works fine under _nice_ conditions, but when powers start incorporating symbols, it will break down.

I don't know if these are really bugs or not, but made my work on this harder.