[WIP] ENH faster, low-memory PolynomialFeatures

This is an alternative to #3512 for fast and low-memory `PolynomialFeatures`. It takes use of the powers matrix sparsity, and uses logarithmic space so that sparse matrix multiplication can be used.

I have marked this WIP as:
* in some cases (e.g. binary-valued features), a float-typed output, as required for logarithmic calculations, isn't ideal.
* we might now consider accepting some sparse input, but that may be up for debate.