Fix exists() being called on every save() operation.

If an entity isNew and contains no primary key data we should not call
exists() as there is no way for it to exist yet. Exists should continue
to be called when the entity has a primary key value and is marked as
new though as it may or may not exist in the database and we need to
know.

Fixes #4260
Tidy up docblock.
More correctly fix issue where new entities would trigger an exists() query.

We need to allow 0 as a primary key, but not check for existing records
if there are no primary key columns.

Additionally, fix up tests that were checking that exists() was called
and now it is not.
Expand has() so we can check multiple properties at once.
Use EntityTrait->has() where possible.

The new has() signature supports higher level code in Table operations
and lets use not use array_filter() in various different ways.
Merge pull request #4272 from cakephp/issue-4260

Fix exists() being called on every save() operation.