Implement the "query" API call

Summary:
query a simpler alternative to submitting a query job, polling for its
completion, and getting its result, and it's easy to build on top of the other
API calls (since everything in tinyquery is synchronous anyway).

Test Plan: tools/runtests.py third_party/tinyquery

Reviewers: colin

Reviewed By: colin

Differential Revision: http://phabricator.khanacademy.org/D12998
Return a simple schema in query results

Summary:
Some of the bq_io code looks at the existence of the schema field to determine
if a query was successful, so this adds an initial version of the schema field
to query results.

No support for nesting or anything like that yet.

Test Plan: tools/runtests.py third_party/tinyquery

Reviewers: colin

Reviewed By: colin

Differential Revision: http://phabricator.khanacademy.org/D12999
Allow square brackets when specifying identifiers

Summary:
Some identifiers (such as table names) are allowed to start with a number, but
that confuses the lexer in some cases, so the syntax to work around that is to
put square brackets before and after the token. It looks like all regular
identifers can have square brackets around them (even things like MAX), so I do
that at lex time.

Test Plan:
SHOULD_REBUILD_PARSER=1 tools/runtests.py third_party/tinyquery
(It turns out the parser isn't affected for this change.)

Reviewers: colin

Reviewed By: colin

Differential Revision: http://phabricator.khanacademy.org/D13000
Implement tabledata.list

Summary:
This API call lets you access table contents directly (rather than through a
query), and it's used by bq_io.py. The output format is the same as for query
results, so implementing it was just a matter of refactoring things to use that
code.

Test Plan: tools/runtests.py third_party/tinyquery

Reviewers: colin

Reviewed By: colin

Differential Revision: http://phabricator.khanacademy.org/D13001