Implement reverse JMESPath support to build params

This adds proper reverse JMESPath support so that we can now build all
parameters properly. The following did not work before, but does now
because we can build up the filters array structure:

```python
ec2 = boto3.resource('ec2')

instances = ec2.instances.filter(
    Filters=[{'Name': 'instance-type', 'Values': ['m1.small']}])

for instance in instances:
    print(instance.id)
```

Tests are added to cover the various cases of `dict` and `list`
combinations.

cc @jamesls, @kyleknap