ENH enable setting pipeline components as parameters

Until now, `get_params()` would return the steps of a pipeline by name, but setting them would fail silently (by setting an unused attribute).

This changeset also prohibits step names that equal initialisation parameters of the pipeline; otherwise `FeatureUnion.set_params(transformer_weights=foo)` would be ambiguous.

It also contributes some refactoring of `Pipeline`'s prediction methods.