Make ordering consistent across all dialects

This PR gives consistent ordering / grouping semantics across all dialects. It also provides support for multiple order columns for all dialects (closes #817 ) and support for functions in order / group by (closes #783) 

The semantics are described below
```js
something.find({
  order: [
    'name',
    // will return `name`
    'username DESC', 
    // will return `username DESC` -- i.e. don't do it!
    ['username', 'DESC'], 
    // will return `username` DESC
    sequelize.fn('max', sequelize.col('age')), 
    // will return max(`age`)
    [sequelize.fn('max', sequelize.col('age')), 'DESC'], 
    // will return max(`age`) DESC
    [sequelize.fn('otherfunction', sequelize.col('col1'), 12, 'lalala'), 'DESC'], 
    // will return otherfunction(`col1`, 12, 'lalala') DESC
    [sequelize.fn('otherfunction', sequelize.fn('awesomefunction', sequelize.col('col'))), 'DESC'] 
    // will return otherfunction(awesomefunction(`col`)) DESC, This nesting is potentially infinite!
    [{ raw: 'otherfunction(awesomefunction(`col`))' }, 'DESC']
    // This won't be quoted, but direction will be added
    ]
})

something.find({
  order: 'name, username DESC'
}) // Will generate 'ORDER BY name, username DESC', since we leave a single order string alone
```

The distinction is basically - if order / group is a single string, we leave it alone, if it is an array we handle each element. The logic for what to do with strings/arrays/objects is common to all dialects, so I've added that in the abstract QG (which has moved from being solely an interface def, to now containing one actual implementation, and a lot of interface defs)

Previously, a string passed to order would be escaped from pg, but not for mysql (as in id DESC would be "id" DESC for PG, but id desc for mysql). Now it is id DESC for all dialects, to allow for a way of passing a verbatim qoute string. This means that we slightly change semantics / backwards compat., but I would argue that it is okay in this case, for the sake of making the api consistent. Furthermore, two things can happen when the order string is no longer escaped in PG:
1. Nothing, if the string is all lowercase
2. PG Syntax error, because case-sensitive strings MUST be quoted if they were created with quotes. In that case it is an easy fix to change to the "right" syntax.

Futhermore, all grouping strings were escaped - I've removed that feature, to make the API consistent