With the hardware MSSP it really is as simple as dumping the data I want to send down the line into the buffer, calling a function, then letting it get on with it while I process something else. If I want to know when it's done, I just periodically check the I2C status to see if it's "Complete" yet.