Enclosure looks nice! Better than my PCB with Duemilanove cable-tied to it.
Yes, you need caps for each device. 0.1uF keeps high frequency noise, 10uF acts as local current buffer for the large currents being switched on/off.
Looks like you have slightly old code. See if this helps
byte display_test = 0x0D; This needs to be 0x0F,
byte displayArray[192] = { }; // 192 bytes
These need to be written with 0x07:
// scan limit to all 7 columns
digitalWrite (ss0, LOW);
SPI.transfer (scan_limit);
SPI.transfer (0x08);
digitalWrite (ss0, HIGH);
digitalWrite (ss1, LOW);
SPI.transfer (scan_limit);
SPI.transfer (0x08);
digitalWrite (ss1, HIGH);
digitalWrite (ss2, LOW);
SPI.transfer (scan_limit);
SPI.transfer (0x08);
digitalWrite (ss2, HIGH);
digitalWrite (ss3, LOW);
SPI.transfer (scan_limit);
SPI.transfer (0x08);
digitalWrite (ss3, HIGH);
these need to be written with 0x01 for Normal mode (vs shutdown)
// dispay test to normal
digitalWrite (ss0, LOW);
SPI.transfer (display_test);
SPI.transfer (0x00);
digitalWrite (ss0, HIGH);
digitalWrite (ss1, LOW);
SPI.transfer (display_test);
SPI.transfer (0x00);
digitalWrite (ss1, HIGH);
digitalWrite (ss2, LOW);
SPI.transfer (display_test);
SPI.transfer (0x00);
digitalWrite (ss2, HIGH);
digitalWrite (ss3, LOW);
SPI.transfer (display_test);
SPI.transfer (0x00);
digitalWrite (ss3, HIGH);