Here's something I'd try. You use this pattern a lot:
digitalWrite(Leds[0], LOW);
I wonder if it generates less code to replace all those calls with calls to a function to do the dereference:
// global LED control function
void setLed(byte led, byte lohi) {
digitalWrite(Leds[led], lohi);
}
// replace all digitalWrite(Leds[0], LOW); with:
setLed(0, LOW);
It would be easy to try on a few cases to see what the space impact is.
-br