[WIP][HttpFoundation] enhance PdoSessionHandler

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | yes
| BC breaks?    | yes
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #5483, #2067, #2382
| License       | MIT

0. [x] Continuation of locking implementation (#10908): Implement different locking strategies
  - `PdoSessionHandler::LOCK_TRANSACTIONAL` (default): Issues a real row lock but requires a transaction
  - `PdoSessionHandler::LOCK_ADVISORY`: app-level lock, safe as long as only the PdoSessionHandler accesses sessions, advantage is it does not require a transaction (not implemented for oracle or sqlsrv yet)
  - `PdoSessionHandler::LOCK_NONE`: basically what is was before, prone to race conditions, means the last session write wins

1. [x] Save session data as binary: Encoding session data was definitely the wrong solution. Session data is binary text (esp. when using other session.serialize_handler) that must stay as-is and thus must also be safed in a binary column. Base64 encoding session data just decreses performance and increases storage costs and is semantically wrong because it does not have a character encoding.
That saving null bytes in Posgres won't work on a character column is also documented

    > First, binary strings specifically allow storing octets of value zero and other "non-printable" octets (usually, octets outside the range 32 to 126). Character strings disallow zero octets, and also disallow any other octet values and sequences of octet values that are invalid according to the database's selected character set encoding. 
http://www.postgresql.org/docs/9.1/static/datatype-binary.html#DATATYPE-BINARY-TABLE

  Needs more testing for different DBMS and actually using PDO. And questionable is also what gets returned in a select of a binary column. The hex representation, the binary string or sometimes a resource see http://wezfurlong.org/blog/2005/oct/lob-support-added-to-pdo-oci-in-php-5-1-cvs-finally/ (`PDO::ATTR_STRINGIFY_FETCHES`)
  - [ ] SQL Server seems to require casting of values to insert into varbinary. See http://sqlfiddle.com/#!6/2754d/4 but without actually using PDO I don't know whether it does the conversation automatically. Using a  PDO::PARAM_STR would require bin2hex() and convert with style 2. See http://stackoverflow.com/questions/9516480/insert-blob-from-mysql-data-in-varbinary-sql-server-field-with-zend-db But maybe this is not necessary with PDO::PARAM_LOB
  - [ ] Oracle uses `hextoraw` or `UTL_RAW.CAST_TO_RAW` http://sqlfiddle.com/#!4/7b5c4/20

2. [x] Implement lazy connections that are only opened when session is used by either passing a dsn string explicitly or falling back to session.save_path ini setting.

3. [x] add a create table method that creates the correct table depending on database vendor. This makes the class self-documenting and standalone useable.

5. [x] add lifetime column to session table which allows to have different lifetimes for each session

6. [x] add isSessionExpired() method to be able to distinguish between a new session and one that expired due to inactivity, e.g. to display flash message to user

7. [ ] added upgrade and changelog notes (needs revisit)
change to varbinary which also works