code: function(e, for_variable, powers) { 
              powers = powers || [];
              var g = g = e.group; 
              if(g ===  PL && for_variable === e.value) {
                  powers = powers.concat(keys(e.symbols)); 
              }
              else if(g === CP) { 
                  for(var s in e.symbols) {
                      var symbol = e.symbols[s]; 
                      var g = symbol.group, v = symbol.value; 
                      if(g === S && for_variable === v) powers.push(symbol.power);
                      else if(g === PL || g === CP) powers = __.polyPowers(symbol, for_variable, powers);
                      else if(g === CB && symbol.contains(for_variable)) {
                          var t = symbol.symbols[for_variable];
                          if(t) powers.push((t.power));
                      }
                      else if(g === N || for_variable !== v) powers.push(0);
                  }
              }
              else if(g === CB && e.contains(for_variable)) {
                  powers.push(core.Utils.decompose_fn(e, for_variable, true).x.power);
              }
              return core.Utils.arrayUnique(powers).sort();
          }
docs: Get's all the powers of a particular polynomial including the denominators. The denominators powers
  are returned as negative. All remaining polynomials are returned as zero order polynomials.
  for example polyPowers(x^2+1/x+y+t) will return [ '-1', 0, '2' ]
  @param {Symbol} e
  @param {String} for_variable
  @param {Array} powers
  @returns {Array} An array of the powers
   assumes you've already verified that it's a polynomial