Discovery

```Python
In [1]: from datashape.discovery import discover

In [2]: data = [{'name': 'Alice', 'amount': '100'},
   ...:         {'name': 'Bob', 'amount': '200'},
   ...:         {'name': 'Charlie', 'amount': '300'}]

In [3]: discover(data)
Out[3]: dshape("3 * { amount : int64, name : string }")
```

We can handle missing data in a variety of cases as well.  Here is the result of calling discover on the `kiva_tiny` dataset living in `blaze/samples/server/arrays/lenders.json`

```Python
In [3]: with open('lenders.json') as f:
    data = json.load(f)
In [4]: discover(data)
Out[4]: dshape("52 * { country_code : option[string], image : { id : int64, template_id : int64 }, invitee_count : int64, inviter_id : string, lender_id : string, loan_because : option[string], loan_count : int64, member_since : datetime, name : string, occupation : option[string], occupational_info : option[string], personal_url : option[string], uid : string, whereabouts : option[string] }")
```