Updated file-reading and opening for CSV files

This change adds functionality to the csv.py and fixes some small bugs.
The added functionality makes using gzip files transparent to the user. 
If opening a gzip file, we don't have to specify
```python
import gzip
CSV("path/to/csv.gz", open=gzip.open)
```
Now, we can leave the "open=gzip.open" out and CSV() will discover that for itself.
The "open" parameter can still be specified, so this change is backwards compatible.

Bugs fixed:
 Added the "mode" parameter to calls to open(), and changed all open() calls to the correct self.open()




Use `if self.open is None`. See PEP 8 and [this link](http://stackoverflow.com/questions/3647692/when-is-the-operator-not-equivalent-to-the-is-operator-python) for more info. tl;dr is that `is` and `is not` can't be overloaded so you can't make it (easily) do funky things. Also, `is` and `is not` are slightly faster, though here that doesn't really matter.