Singular through model

PR for https://github.com/sequelize/sequelize/issues/2415

When a through table model is auto-created in defining a many-to-many association, the current behaviour is for the model's name to be pluralized and the same as the table name. This behaviour is at odds with the general Sequelize convention of singular model names and plural table names.

This PR changes that behaviour to make the model names singular.

So now:

    Person.hasMany(Task);
    Task.hasMany(Person);

creates a through model called `PersonTask` with table name `PeopleTasks`.

When retrieving a many-to-many associated table using eager-loading, the attributes of the join table are available in a key named the same as the through model (i.e. singular). It used to be plural, which makes little sense since there is only a single row.

e.g.

    Person.findAll( { include: Task } )

returns:

    [ {
      name: 'Bob',
      Tasks: [ {
        name: 'Do the washing',
        PersonTask: { ... }
      } ]
    } ]

This PR also fixes a few places in the code where the table name was used where it should have been the model name.
@vpontis The idea is that specifying `through` in `x.hasMany( y, { through: 'xy' } )` defines 'xy' as the name of the through model NOT the table. The table name will be pluralized.

But does that make any difference to the user in most cases? I think it'd be uncommon unless you are writing SQL queries direct. Otherwise, Sequelize will translate to the table name automatically and transparently.

If you want to name the table something else you can always produce the previous behaviour by defining the through table manually and specifying `tableName` with `sequelize.define( 'xys', { tableName: 'xys' } )`

My logic with all of this was to make it consistent with the way Sequelize treats model names and table names elsewhere. Yes, it will break BC, but it makes the API consistent overall, so I'd argue that (a) it's the right thing in the long run and (b) now is the time to make BC-breaking changes before a major release.

That's just my opinion though...