Fast query solver now supports some cases of Let.

On lsof (which has two Let subexpressions) the profiler says:

Old code:
        2    0.000    0.000    0.116    0.058 lookup_table.py:126(visit_Expression)
        2    0.000    0.000    0.463    0.232 lookup_table.py:130(_slow_Let)
        2    0.000    0.000    0.463    0.232 lookup_table.py:143(visit_Let)
        1    0.000    0.000    0.464    0.464 lookup_table.py:39(search)
        1    0.000    0.000    0.464    0.464 lookup_table.py:48(visit_Intersection)
        4    0.000    0.000    0.000    0.000 lookup_table.py:62(_subquery)
        4    0.009    0.002    0.463    0.116 lookup_table.py:66(_slow_solve)

New code:
      3/2    0.007    0.002    0.175    0.087 lookup_table.py:143(visit_Let)
        1    0.000    0.000    0.175    0.175 lookup_table.py:39(search)
        4    0.000    0.000    0.053    0.013 lookup_table.py:44(visit_ComponentLiteral)
        1    0.000    0.000    0.175    0.175 lookup_table.py:48(visit_Intersection)
      2/1    0.000    0.000    0.053    0.053 lookup_table.py:55(visit_Union)
        7    0.014    0.002    0.109    0.016 lookup_table.py:75(_as_entities)

For a speed up of whopping 300 ms per query.

BUG=
R=scudette@gmail.com

Review URL: https://codereview.appspot.com/181470043