[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.
Well, one option is to require that these properties raise `AttributeError` until `fit` is called. That's probably excessive.

But if we shan't require that, can you give me an idea of why `allowed_properties` is necessary? Why is it not enough to accept that this is a class attribute rather than an instance attribute, and hence permit it, especially with the `isinstance(..., property)` check?