bulk_upsert operates on models rather than dictionaries

@jeffmcriffey I made the bulk_upsert function take models instead of dictionaries to be more consistent with the other functions