Explicitly Define Vertica Error Classes

Right now, it's hard to do error handling for specific errors, such as SyntaxError and InsufficientResources. This change adds the ability to easily catch those error classes. 

Example: 
```python
try:
    query_syntax_error = 'select count(*) frm my_table'
    data = get_data(query_syntax_error)
except VerticaSyntaxError:
    print('VerticaSyntaxError caught.')
```
can you insert two newlines between top-level declarations per pep-8? I'm aware there are counterexamples in this file but we should strive for pep8 wherever possible