Implement assignment kernels for the tuple type

This is mostly restructuring the code that already existed for struct assignment.