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 deploying an estimator
and peprocessing together, e.g. with Pipeline.to_gbq(...).