Natural Language Syntax

Namespace:
The Schema object was replaced with a more generic Namespace class that
supports as many levels as necessary.

Natural Syntax:
I restructured how joins and filters are built. They can now be built
using a flowing natural syntax similar to actual SQL.

TokenStream:
I decided to create a TokenStream class to simplify the token generation
functions.

Local Aliases:
I realized that aliases shouldn't be associated with tables and
projections. Instead, the same Table, SelectBuilder and ProjectionItem
should be reusable in as many contexts as desired. So, aliasing must be
specified in the context. This eliminated the need for
ProjectionItemFormatter. It also makes it possible to detect duplicate
table names/aliases and column names/aliases.

Eliminate Recursion:
I eliminated a lot of unnecessary recursion when building token lists
from the builders.