Add Optional support to Expressions

This adds support for Expression<T?> to denote SQL expessions that may
evaluate to NULL. It's verbose given the number of permutations to
overload most operators, but brings a lot of benefits to the table:

 1. Stricter typing. The compiler will let you know if you do something
    like try to compare a NOT NULL column to nil.

        let age = Expression<Int?>("age")
        let id = Expression<Int>("id")
        users.filter(age == nil)
        users.filter(id == nil) // Won't compile. Meaningless.

 2. Automatic NOT NULL support during schema creation.

        t.column(age) // age INTEGER
        t.column(id)  // id INTEGER NOT NULL

 3. Perhaps most importantly, the ability to automatically unwrap a row
    and return a value directly.

        user[age]     // Optional(30)
        user[id]      // 1

Signed-off-by: Stephen Celis <stephen@stephencelis.com>