grid api

Hmmm, i don't think we should allow that signature. Here's *an* option, among many we could pursue (this is obviously incomplete, for example this could assign duplicate names very easily):

```python
class Grid():

    def __init__(self, array=None, name=None, is_matrix=False):
        self.index = 0
        if all((array, name, is_matrix)):
            self.add_matrix(array, name)
        elif array:
            self.add_column(array, name)

    def add_column(array, name=None):
        # do whatever we need to do to add a column
        self.index += 1

    def add_matrix(matrix, name=None):
        if not name:
            name = 'z'
        for index, array in enumerate(matrix):
            self.add_column(array, name='{}-{}'.format(name, index))
```

I actually don't see too much of a problem with allowing an array of names from the user side, but it does make our implementation code a bit sloppier perhaps. I.e., from a user-perspective, I don't see a problem with:

grid = Grid([1,2,3], 'betty')
grid.add_matrix([[1,2], [3,4]], ['time', 'weight'])

In fact, i think we should be pretty loose with instantiation. Right now you can just stick a totally nested dict into a graph_obj and it will be fine with it. I'd sort of expect that of the Grid object too. It would *really* be important for instantiating eventually from a Pandas object later on... maybe something this is more appropriate then?

```python
class Grid():
    def __init__(iterable, name_or_name_array):
        # do stuff
        pass
```

Finally, we could just have helper functions for instantiation as well:

`grid_objs.get_grid_from_matrix()