Bugfix on error handler & added allowLargeResults for table write

Regarding `func:wait_for_job`

1) There is no `jobComplete` in response for jobs.insert api. We can use `job_resource.get('status').get('state') == u'DONE'` to determine if job has completed

2) `job_resource.get('error')` won't retrieve any error message. We can use `job_resource.get('status').get('errorResult')` to get the error message.

For illustration, here's a short excerpt of a response with error (unicode removed for readability). 

```
 "status": {
     "state": "DONE",
     "errorResult": {
         "reason": "responseTooLarge",
         "message": "Response too large to return."
     },
     "errors": [{
         "reason": "responseTooLarge",
         "message": "Response too large to return."
     }]
 },
```

Looks like this error handling code is used in several places. Maybe we want to put this in a _function to make the code a bit more DRY. Could just be something simple like this:

```python
def _raise_if_error(job):
    error_http = job.get('error')
    if error_http:
        raise JobInsertException("Error in export job API request: {0}".format(error_http))
    # handle errorResult - API request is successful but error in result
    error_result = job.get('status').get('errorResult')
    if error_result:
        raise JobInsertException("Reason:{reason}. Message:{message}".format(**error_result))
```