Adds logic for tracking ipc storage driver process status

IPC storage driver requests are now made in new goroutines so we can select on receiving a result or process exit. This prevents these requests from hanging if the process exits for any reason.

@dmp42 @stevvooe 
Maybe capture this pattern in a single spot:

```
if err := driver.exited(); err != nil {
    return nil, err
}

func (driver *StorageDriverClient) exited() error {
    select {
	case err := <-driver.exitChan:
		return err
	default:
		return nil
	}
}
```

There may be some adjustments, so please see the other comments.