3.0 - Implement connection prefixes (#2666)

This PR aims to implements connection prefixes (#2666).

Since it's my first PR ever on an open source project, feel free to tell me if I did anything wrong.
I also have a some questions regarding "Cakey" way to do things :

1/ Should the Connection::fullTableName() method throws an exception if the $name parameter is neither a string nor an array ?
2/ Are there any missing tests ? (ie. should I write test for the Query::from() and Query::join() methods as well as the Collection::describe() ? I tried for the last one but was not successful in having correct results. I was hopping a core contributor could help me write this test)
Well, it's actually the only solution I found so far as when quoting appends, $value is still an Expression. I could `__toString()` it in order to quote it at this moment but there's no instance of the ValueBinder.
I guess I could mutate the name property in the Expression instance by calling the `quoteIdentifier` method on it (only if the name is a string) like :
```
if ($value instanceof TableNameExpression) {
    $tableName = $value->getName();
    if (is_string($tableName)) {
        $quoted = $this->_driver->quoteIdentifier($tableName);
        $value = $value->setName($quoted);
    }
}
```
It would then prevent each TableNameExpression to hold an instance of the driver.

I'll give it a shot.