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
* [ ] Dot
* [ ] Line
* [ ] Step
* [ ] Area
* [ ] Violin
* [ ] 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?
py3 compatibility. `map` et al. now return iterators, so you should use `list(map(...))` or often safer `[ str(s) for s in ... ]`. Obviously I'm assuming you want to be consistent with other branches in this `if` statement.