Feature/normalize charts inputs

This PR addressed #1309 

Implementation status:

* [x] Bar

    * [x] inputs support (DataFrame, dict of lists/arrays, lists of lists/arrays, arrays)
    * [x] stacking
    * [x] grouping
    * [ ] facetting
    * [x] "pile of kwargs" interface
    * [x] "method chaining" interface

* [x] BoxPlot

    * [x] inputs support (DataFrame, dict of lists/arrays, lists of lists/arrays, arrays)
    * [ ] groupby input support 
    * [ ] colormap by category (FEATURE NOT CONFIRMED)
    * [ ] ordering (FEATURE NOT CONFIRMED)
    * [x] facetting
    * [x] "pile of kwargs" interface
    * [x] "method chaining" interface

* [x] Histogram

    * [x] 1d array input support
    * [x] inputs support (DataFrame, dict of lists/arrays, lists of lists/arrays, arrays)
    * [x] facetting
    * [x] "pile of kwargs" interface
    * [x] "method chaining" interface

* [x] TimeSeries

    * [x] single index inputs support (DataFrame, dict of lists/arrays, lists of lists/arrays, arrays)
    * [x] string index key support on single index inputs(for DataFrame and dict inputs)
    * [ ] integer index key support  on single index inputs(for lists and arrays)
    * [ ] distinct indexes inputs support
    * [x] facetting
    * [x] "pile of kwargs" interface
    * [x] "method chaining" interface

* [x] Scatter
    * [x] inputs support (DataFrame, dict of lists/arrays, lists of lists/arrays, arrays where all vars = 1d iterable of scalars like: ((x0, y0), (x1, y1), (x2, y2)))
    * [x] groupby input support 
    * [x] facetting
    * [x] "pile of kwargs" interface
    * [x] "method chaining" interface

* [x] heatmap
    * [x] inputs support (DataFrame, dict of lists/arrays, lists of lists/arrays, arrays)
    * [x] categorical ranges
    * [ ] scalar ranges
    * [x] "pile of kwargs" interface
    * [x] "method chaining" interface

* [ ] Violin
* [x] Dot
* [x] Line
* [ ] Step
* [x] Area
* [ ] Violin
* [x] Donut

---------------------------- END STATUS  -----------------------

(older disccussion for reference #393 )


Introduces a new DataAdapter class that can be used by Charts to normalize different inputs and used the same interface to access data. Supported input types:

* Dataframe
* Dict/OrderedDict
*List
* Array

It's interface is not good enough now and mixes dict and dataframe api (specially regarding names like: columns, index, keys, values, etc...), but it's a start 

Here's the DataAdapter design summary for now:

- Implements columns and keys attributes that are used to map series name. Maps to list of indexes in case of List or Array. 
- Implements values attribute that basically behaves like dict values.
- Implements index attribute that behaves returning the indexes (or keys) of the first items of values. 
- Implements support for explicit columns and index aliases so if user have a pure matrix of values (np.array or list of lists) it can pass one list of column aliases and another of index aliases to be used for axes.

In this scenario users can pass the any of the DataAdapter supported types listed above or a DataAdapter explicitly (if they need use aliases on their data).

NOTE: Boxplot, CategoryHeatMap, Histogram and Bar expect a "1 level" iterable to be consumed for the plot (that can be seen as a list of lists (of values)). Scatter and TimeSeries expect a "2 levels" iterable (a list of lists that elements are points (with x and y coordinates). I.e.: timeseries expects a datetime and a number as tuple elements). Is this separation in 2 groups ok? Can we simplify it?
>Yes, they can. The previous implementation was setting grids statically and my understanding was that it's because some Charts don't really work with all grids combinations (take HeatMaps or other categorical chart types). @damianavila correct if I'm misunderstanding previous implementation here.

Yep, You are right...

> So I just moved those attributes as class attrs to not tweak with __init__ too much for now.

OK.

> On overall I think that the inflation of __init__ and other methods is tricky to manage in an elegant and concise way due to the number of customization and combinations we can have. I've been thinking about the concept of stylesheet objects that can be created (and passed to chart classes) to customize the universe of Charts style. I'd like to think more about it and create an issue for that, eventually.

Interesting idea, and yes, open an issue to discuss it later...