Add Table::findOrNew()

This method lets you easily find an existing entity or generate a new entity with the chosen properties. In addition to finding entities, it lets you patch/set additional attributes on the found/created entity.

I decided to call the method `findOrNew()` as I wanted it to have consistency with `newEntity()` and I was concerned that `findOrCreate()` might imply that the entity would be saved.

Refs #4631
Do we want to typehint both as `array`s? Or should those be open to other forms of arrays?