Add Column safety helper

A bit more declarative sugar for building queries, e.g.:

    // given
    let users = db["users"]
    let admin = Column<Bool>("admin")
    let age = Column<Int>("age")

    users.filter(admin && age >= 30).order(age.desc)
    // SELECT * FROM users WHERE admin = 1 && age >= 30 ORDER BY age DESC

    users.group(age, having: count(age) == 1)
    // SELECT * FROM users GROUP BY age HAVING count(age) = 1

In the process: a refactor of how bindings are stored and processed in
the Query layer. This DRYs up some logic and adds support for bindings
in JOIN clauses.

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