Add support for string-based paths to `has`, `get` and `set`

Minor note:

Since `traverse.set` is a noop for an invalid path,
```javascript
traverse.set({foo: 2}, ['foo', 2, 'bar'], 'baz')
```
`traverse.set({foo: 2}, [], 'bar')` is a noop.