Sequentially apply a list of transforms and a final estimator.
Intermediate steps of the pipeline must be transforms. That is, they
must implement fit and transform methods.
The final estimator only needs to implement fit.
The purpose of the pipeline is to assemble several steps that can be
cross-validated together while setting different parameters. This
simplifies code and allows for deploying an estimator and peprocessing
together, e.g. with Pipeline.to_gbq(...).