Remove duplicate SQL parts in query generation

Presently, it's possible to do this using QueryBuilder:

```php
$qb->select('u.*')
   ->from('users', 'u')
   ->addOrderBy('u.name', 'ASC')
   ->addOrderBy('u.name', 'ASC'); // duplicate
```
Which produces:
```sql
SELECT u.* FROM users u ORDER BY u.name ASC, u.name ASC
```

This patch removes duplicates from the `SELECT`, `SET`, `ORDER BY` and `GROUP BY` parts during SQL generation (there's already logic that removes duplicate `FROM` parts).

I've added test cases for each affected keyword as well.