I apologize for my previous post. For some reason, every time I read over the topic I read "I2C" instead of "SPI". I am now unable to edit it, so I will post my addendum here:
Rolling your own SPI Master should be just about the same (if not less) level of complexity of doing your own I2C as my code above illustrated. I have found that rolling your own bus implementations can be pretty easy if you read over the specs carefully and use an oscilloscope (or a DLA, but that makes it a little more difficult for busses that rely on pull-ups like I2C) to observe what you have got so far.
In my opinion, your main hurdle will be the minimal number of pins. While a 12F generally has 4 usable pins as far as I know, programming the device in-circuit could cause false SPI signals to appear since you would most likely share some pins with the ISCP interface. A potential way around this would be to put a resistor on the slave-select line pulling it to the "nothing selected" state when it goes to High-Z state (as would occur during programming). You would also have to put that pin on a non-ISCP pin.
There are some implementations of SPI that do not require the use of SS (slave select), but if they do require it or you need to select one of multiple devices, I would find an I2C-based port expander and use those pins to implement the bus (albeit at a significantly lower speed than would be possible directly operating it off the 12F's pins.
As for programming it, I would start here:
https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus#Operation and then continue to the datasheets for the devices you are using. The datasheets most likely contain a definition of SPI and specifics about their exact implementation. I have done SPI before, but it was on an 18F and I can't remember if I used the hardware module or not (I actually think I didn't because I was using the hardware module for I2C since that's more complex than SPI, so it was more economical to program the SPI and leave the I2C to hardware). Every time I have had to re-roll the interfaces either because I didn't like the last way I did it or I am using a different MCU, I have found the datasheets to be the best source for doing the protocol.
Also, if you have done this in Verlog or VHDL before (assuming a lot since you say you are almost done with a EE degree and I have no idea what the program at your university covers), you may find that this isn't a horribly difficult task since I honestly have found it easier to program bus interfaces in software rather than writing a description for the hardware.