Reuse receivers

ExternalServiceReceivers were not being reused when they already existed; this fixes that. Also wrapped a transaction around all the DB writes.