refactor loading/creating of submissions for assignments

optimizes and hopefully avoid deadlocks

 * use a single query to get all the submissions
 * use the association to load them for shard safety
 * preload self on the submission so it doesn't need to be loaded later
 * go through students in id order to avoid deadlocks with other
   transactions that also go in user id order

test plan:
 * simple regression test on submitting normal and group assignments

Change-Id: Ic96fc91c402e3968a3e63ca5f08ed204bfa389f8
Reviewed-on: https://gerrit.instructure.com/28257
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
QA-Review: August Thornton <august@instructure.com>
Product-Review: Cody Cutrer <cody@instructure.com>