[MRG+1] don't set trailing "_" attrs in __init__

As I said over at gh-3627, 

> we need to fix all the `__init__`s that set final-underscore attributes. Some of them set those to None or similar values. [...] we should do a systematic search of the codebase and introduce a smoke test.

I did just that.

Note: code uses `getattr(self, "someattr_", None) is None` instead of `hasattr`, in an attempt to be backwards compatible with pickled estimators that have these attributes. I'm not sure how important that is (who would pickle before fit?) and unpickling is not tested.
@jnothman I would like to get at least part of this PR merged so we can prevent new contributions from making the mistake of setting `fit` parameters in `__init__`. How would you like me to proceed?