ENH/WIP: New time gen class

Closes #1302. 

@kingjr sorry rebasing was a mess, I had to squash your commits to get started within a finite amount of time. Your commits are supposed to be logged and counted anyways

Here's a list of things I addressed.

1. Enforce sklaern API that distinguishes between parametersa and attributes
2. make score and predict return the corresponding values
3. fix unfarable expression which create references not copies e.g ```[[]] * len(test_times``` creates a list of len(test_times) times the same list object.
4. fix the default y and simplify the example. I figured out that sklearn apparently expects 0 and 1 or True and False for the binary case. Using scipy.stats.rankdata as a trick to achieve this.
5. isolated the changes related to the new class from the changes related to the previous attempt to modify the existing function.
6. rebased and fixed unit tests.
7. caught a corner case where predict == 'distance' will crash (binary casses).
8. addressed pep8 issues
9. added doc to better document for developers and users the attributes. e.g. the somewhat complex list of lists approach to scores and estimators (yes I know not easy to do otherwise).

Todo:

1. doc is not fully complete.
2. Check a few parts in the code with you @kingjr to check whetehr we can do bettr.
3. extend tests.
4. update whats new once we're don here.

Important:

Absolute feature add block. We're going to stabilize what's there and then we move on in *smaller* steps. For this @kingjr I only want to hear from you that the overall structure is expected to stay.

@agramfort if you're looking for a review job ...

@kingjr consider this example (watchout, inbuilt python, not numpy):

```
>>> sum([1, 2], 7)
>>> 10
>>> sum([[1, 2], ['a', 'b']], [])
>>> [1, 2, 'a', 'b']
```
A pythonic way to flatten a list thanks to operator overloading.