Use jsonpath library to walk dict hierarchy.

- Benefit of using this library is that some more key options open up.
- Subtle fix in the return of jsutil to improve rendering of dict values.


=== Output ===
* Without -k
```
$ st2 execution get 54822ea10640fd1b449fc5e7
STATUS: succeeded
RESULT:
{
    "localhost": {
        "failed": false,
        "stderr": "",
        "return_code": 0,
        "succeeded": true,
        "stdout": "PING google.com (74.125.239.136) 56(84) bytes of data.
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=1 ttl=63 time=6.47 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=2 ttl=63 time=80.2 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=3 ttl=63 time=7.08 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=4 ttl=63 time=6.25 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=5 ttl=63 time=6.39 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=6 ttl=63 time=9.17 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=7 ttl=63 time=6.99 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=8 ttl=63 time=11.5 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=9 ttl=63 time=7.41 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=10 ttl=63 time=8.08 ms

--- google.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9016ms
rtt min/avg/max/mdev = 6.254/14.971/80.280/21.823 ms"
    }
}
```

* with -k and dict value
```
$ st2 execution get 54822ea10640fd1b449fc5e7 -k localhost
{
    "failed": false,
    "stderr": "",
    "return_code": 0,
    "succeeded": true,
    "stdout": "PING google.com (74.125.239.136) 56(84) bytes of data.
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=1 ttl=63 time=6.47 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=2 ttl=63 time=80.2 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=3 ttl=63 time=7.08 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=4 ttl=63 time=6.25 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=5 ttl=63 time=6.39 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=6 ttl=63 time=9.17 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=7 ttl=63 time=6.99 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=8 ttl=63 time=11.5 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=9 ttl=63 time=7.41 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=10 ttl=63 time=8.08 ms

--- google.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9016ms
rtt min/avg/max/mdev = 6.254/14.971/80.280/21.823 ms"
}
```

* with -k and string value
```
$ st2 execution get 54822ea10640fd1b449fc5e7 -k localhost.stdout
PING google.com (74.125.239.136) 56(84) bytes of data.
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=1 ttl=63 time=6.47 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=2 ttl=63 time=80.2 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=3 ttl=63 time=7.08 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=4 ttl=63 time=6.25 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=5 ttl=63 time=6.39 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=6 ttl=63 time=9.17 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=7 ttl=63 time=6.99 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=8 ttl=63 time=11.5 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=9 ttl=63 time=7.41 ms
64 bytes from nuq05s02-in-f8.1e100.net (74.125.239.136): icmp_seq=10 ttl=63 time=8.08 ms

--- google.com ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9016ms
rtt min/avg/max/mdev = 6.254/14.971/80.280/21.823 ms
```
Hm - did this "fix" the tests?

From the docs:

> assertDictEqual(expected, actual, msg=None)
 Test that two dictionaries are equal. If not, an error message is constructed that shows the differences in the dictionaries. This method will be used by default to compare dictionaries in calls to assertEqual().