Add more flexibility for more types

-Add float and string types to the list of types.
-In the case of type errors, we now sometimes give non-useless error messages.
Add support for string literals

Currently the lexing is kind of dumb and doesn't understand escaped quotation
marks and things like that.
Add true, false, and null literals

The only tricky one here is null, since we don't know the type up-front.
Hopefully it should work to propagate a NoneType and convert to bool only if
necessary.
Add support for IN with a list of literals

I actually just treat it like a regular function, which isn't the most
performant, since it makes a column for each value, but that can be optimized
later if necessary. I still enforce the requirement that they be literals at
parse time, though.

Also fixed a terrifying bug in the equality function for Context that made it so
everything in evaluator_test was artifically returning True. Fortunately, the
only test failures revealed were from typos and things like that.
Add hash and if

Hash doesn't use the right algorithm now, but will in the future.
Ignore comments when lexing
Make column and function names case-sensitive

Previously we were lower-casing everything at lex time, but we actually should
only be case-insensitive for keywords and functions. Since we don't know at lex
time whether something is a function or a column/table, we put that lower-casing
off until parse time.
Fix type for aggregates

Aggregates can be floats as well as ints.
Fix aliases on subqueries in JOINs

It looks like regular select subqueries don't get aliases in some cases, but in
JOINs they always do for all of their fields, so I explicitly replace them here.
Fix up some runtime issues

-Add an IFNULL function.
-Change type checkers for min, max, and sum to be closer to what they should be.