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()




can you move this to outside of the constructor