Controlling a bank of relays
The canonical way to control a lot of outputs using a few is to use one or more 74HC595s cascaded in order to provide as many outputs as required. The only limits to how many you can cascade are timing requirements and the load of the parallel latching inputs.

In order to actually drive the relays you can use the ULN2803A Darlington array, provided you can deal with the voltage drop they have. Note that while the ULN2803A does provide a flyback diode, it assumes that all 8 relays connected to it have the same positive supply (which should be connected to the COM pin of the array).

Both of these chips work with 3.3V ('595 as a supply, '2803A as an input) so they can be driven directly by the RPi (after procuring a voltage regulator so that the 3V3 output from the RPi isn't burnt out), but if you want to offload control then it is possible to use a MCU such as the ATmega32U4 (found in the Arduino Leonardo) instead. This requires programming in order to interface the USB connection with the '595s, but will make things much easier for the host.