Correctly fix behavior for JS objects

Checks if we're looking at a model, and if it has an `idAttribute` defined, if not, we're looking at a function that will return a model, calls the function, and gets the `idAttribute` to pass it to the `attr` lookup to find the matching model in the collection.

Also add a way to return an empty model without any of the overhead by passing in `{empty:true}` as an option in the model constructor. This is to avoid all the overhead with creating the model and running through it's initialize function on each loop iteration over a JS object passed in, keeping things clean and tidy.