Fix the issue #3745, the code book generation for OutputCodeClassifier

+ Change the process of generating output code for OutputCodeClassifier. The process is to draw subsets of the exhaustive code book, see [1], multiple times and pick the one that give largest hamming distances between classes.
+ Change the default value of code_size from 1.5 to 1. 1.5 is problematic. For example when n_classes = 3, the size of exhaustive code book is 3, so 1.5 for code_size is not possible.
+ Add test case.
+ Update the document.

[1] Thomas G. Dietterich, Ghulum Bakiri. Solving Multiclass Learning Problems via Error-Correcting Output Codes
> in the old implementation, it has the following, 
>````
        if hasattr(self.estimator, "decision_function"):
            self.code_book_[self.code_book_ != 1] = -1
        else:
            self.code_book_[self.code_book_ != 1] = 0
````

>So when the estimator has decision function, the negative code will be -1.

>``"hamming"`` looks good to me.

>The original strategies in the paper are fine. But not every of them works well in general situation.
>(1) The exhaustive code, could be super slow, because its size ``2^(n_class-1)-1`` could be exponentially big.
>(2) The description of column selection algorithm seems hand wavy. I cannot quite understand.
>(3) The random hill climbing seems a bit complicated to implement for this simple problem.
>Instead, I consider the algorithms given in 
>http://jmlr.org/papers/volume11/escalera10a/escalera10a.pdf
>more specifically, the sparse random, which I think works fine and is easy to implement. The efficiency should be fine >since the coding book only needs to be generated once.


Can you point the reference of the original paper? It seems to be a software paper.