I think we should change logic here a bit - since right now dict (like headers) shared_request_pararms take precedence over request_params.   For example, in case of 
```
self._shared_request_params = {'headers': {'header1': 'some_value1'}}
kwargs = {'headers': {'header1': 'some_other_value'}}
``` we will end up with `request_params = {'headers': {'header1': 'some_value1'}}`

Probably we need something like:

```
request_params = copy.deepcopy(self._shared_request_params)
for key, value in kwargs.iteritems()
    if isinstance(value, dict):
        request_params[key].update(value)
    else:
        request_params[key] = value
return request_params
````