Fixes PostgresSQL connection problems.

This commit fixes the following connection problems:
* Pools should now properly release themselves always
* You can now set a "TestOnBorrow"-like functionality with
  config.pool.reapInterval).
* Heroku should be able to properly send the correct DB credentials.
Postgres single connections will no longer leak

Some users were experiencing problems with Postgres connections leaking when
they didn't enable pooling. This commit should fix the problem.

- In prototype.disconnect() we now properly call this.client.end with
  this.client.end.bind(this.client) (as shown in the node-postgres wiki).
- We no longer check for readyForQuery on this.client as that value may not
  always be populated by node-postgres (possibly a bug on node-postgres).

This should close https://github.com/sequelize/sequelize/issues/859
ENUM types will no longer in Postgres

Postgres will now add enum's values on .sync() if you were to add
entires into the attribute's.value. It'll also add the enum type in
the proper order. For example:

```js
Table = sequelize.define...
  mood: {
    type: DataTypes.ENUM,
    values: ['happy', 'sad']
  }

// For some reason down the road you redefine the same table
// ...
  mood: {
    type: DataTypes.ENUM,
    values: ['neutral', 'happy', 'sad', 'joyful']
  }
```

Will result in the following SQL:

```sql
ALTER TYPE "...enumTypeName..." ADD VALUE 'neutral' BEFORE 'happy';
ALTER TYPE "...enumTypeName..." ADD VALUE 'jouful' AFTER 'sad';
```

- ```.drop()``` will now pass the options object through (optional)
- Added Postgres.QueryGenerator.pgListEnums(tableName=null,
   attrName=null, options) which lists all of the ENUM types for
   Postgres, if you don't specify an attribute and tablename then
   Sequelize will list all of the Enums
- Added Postgres.QueryGenerator.pgEnumAdd(tableName, attr, value,
   options) which will alter the enum type and add values
- Added Postgres.QueryGenerator.pgEnumDrop(tableName, attr) which
   will drop the enum type
- Postgres.QueryGenerator.pgEnum() will no longer try to drop the
   type unless {force: true} within the ```.sync()``` commands
- Refactored ```QueryInterface.createTable()``` in order to allow
   Postgres to create enum types explicitly rather than from
   Postgres.```QueryGenerator.createTable()```
- Refactored QueryInterface.dropTable() -- same as ```createTable()```
   changes .. also {force: true/force} will now set options.cascade
- QueryInterface.dropAllTables() will now correctly add a quote
   identifier to table names for MySQL

Closes https://github.com/sequelize/sequelize/issues/546
Forgot to check for DAOFactoryManager in DAOFactoryManager.drop() for the dialect when declaring tableName.
Junction table now has correct types when using non-'id' primary keys with non-integer types
Join columns now have correct default type based upon association PK type
Default was integer, which led to casting errors returning the incorrect data
Non-'id' primary key include support - MySQL
Plus cleaning up many-many join to be more understandable
Association columns type tests
Non-id primary key eager loading tests
Non-'id' primary key include support - SQLite
Non-'id' primary key include support - Postgres
Fixed hasMany custom primary key injectSetter and injectAdder to use correct keys
new plan for 1.7
Removed commented lines
Comment clarification. Appeasing Travis
Style guide fixes
Merge pull request #860 from durango/postgres-connection

Fix: Postgres connection issues
Merge pull request #861 from durango/check-type

ENUM types will no longer break in Postgres
Merge branch 'nonidpk' of https://github.com/lemon-tree/sequelize into lemon-tree-nonidpk
Merge branch 'master' into milestones/2.0.0