Allow field limiting on getSingular()

Also, add limit 1 for performance
Allow models to specify their own collection name

Also, refactor selectCollection() to use:

    * getCollectionName() - get the set collection name
    * buildCollection() - build the collection name when not set