[WIP] Made sequelize.where smarter

This PR was sparked by https://github.com/sequelize/sequelize/issues/2298 and adds support for syntax like this:

```js
return User.findAll({
    where: Sequelize.and(
        { type: 1 },
        Sequelize.where(Sequelize.fn('unnacent', Sequelize.col('user.name')), "%t%", 'ILIKE')
      )
});
```
```sql
SELECT * from users WHERE unnacent(users.name) ILIKE '%t%' AND users.type = 1
```

Generally, sequelize.where can now take any sequelize condition object as the key. I've also refactored a bit how sequelize methods are handled in the query generator and moved handling into its own method. I've also moved the code for converting sequelize methods into SQL from utils to the query generator. 
The usecase is for the query generator where we need to inject a where condition where `getWhereConditions` ignores the key and just uses the value purely. literal didn't do this correctly and i didn't wanna change how that worked.