Improve lexer/parser error messages

Lexer error messages:

jmespath.compile('fooasdfasdfasdfasdf.\"bar')"
jmespath.lexer.LexerError: Bad jmespath expression: Bad token '"bar': starting quote is missing the ending quote:
fooasdfasdfasdfasdf."bar
                    ^

Parser error messages:

jmespath.compile('foo]baz')"
jmespath.parser.ParseError: Invalid jmespath expression: Parse error at column 3 near token "]" (RBRACKET) for expression:
"foo]baz"
    ^
Catch case where object can't be indexed

Otherwise the error message is not useful at all.
Map __str__ appropriately in py2/py3
Add with_str_method to ParseError class as well
Merge branch 'better-err-msgs' into develop

* better-err-msgs:
  Add with_str_method to ParseError class as well
  Map __str__ appropriately in py2/py3
  Catch case where object can't be indexed
  Improve lexer/parser error messages