Add some handling of option_type

This adds option_type exposure for construction from lists, and in nd.as_py:

```
In [1]: from dynd import nd, ndt

In [2]: nd.array([None, True, False, 0, 1], dtype='?bool')
Out[2]: nd.array([NA, true, false, false, true], type="strided * ?bool")

In [3]: nd.as_py(_)
Out[3]: [None, True, False, False, True]

In [4]: nd.array([None, 3, 2, None, 1.5])
Out[4]: nd.array([NA, 3, 2, NA, 1.5], type="strided * ?float64")

In [5]: nd.as_py(_)
Out[5]: [None, 3.0, 2.0, None, 1.5]
```