Cast to correct types for list-structure(list-scalar, scalar)

This modifies the shorthand JSON parsing to make sure a list of structures
are cast to the correct types based on the service model. Previously they
would all be set as strings, for example with EMR:

```bash
$ aws emr modify-instance-groups --instance-groups InstanceGroupId=foo,InstanceCount=3

Invalid value ('3') for param element of list:InstanceGroups of type list
```

In the above, the `3` was parsed as a string rather than an integer. This
update uses `unpack_scalar_cli_arg` to fix the issue by casting to the proper
types.

Please review @jamesls.