If you have to go the WiFi route - and I question that this is always necessary - and size matters to may want to look at the Platinum @ diysandbox.com. It integrates an Arduino compatible processor and a Gainspan WiFi module into a unit much smaller than any Arduino+Shield configuration.
Before attempting a solution with a WiFi router I tried my luck with a WiShield or the CopperHead - a clone of the WiShield. Ascynlabs, the maker of the WiShield closed their doors so ther is little if any development on the software side and there is not much traffic on the forum. I got it to receive raw UDP, but that was it. I could not integrate the ArdOSC and DHCP/Bonjour libraries to work.
While physical size is not so much of a concern in my projects trippylighting.com
, due to the ( compiled) code size I wanted something with more flash memory than the UNO and found the fully Arduino compatible Teensy and Teensy++ controllers. The Teensy++ has 128k of flash which solved that problem. These boards are a magnitude smaller than an Arduino UNO not to speak about an Arduino Mega. You can combine a Teensy http://www.pjrc.com/teensy/
with a WizNet Ethernet module that works equivalent to an Ethernet shield http://www.saelig.com/BRD/ETH042.htm
, or if that still is not small enough you can use this one http://www.saelig.com/BRD/BRD032.htm
All of the above is much, much smaller that an Arduino Mega with a WiFi shield. I have the Teensy++ connected with an Adapter board to the WIZ812 module in two projects, connected to a TP-Link WR703n in one case and a TP-Link WR702n in the other case. Works flawlessly in both cases.
The TP-Link routers are each around $30 and their footprint is half the site of an iPhone4 and about 2.5 times as thick.
The other approach for your project is to have only one WiFi shield on a central Arduino that communicates to the Internet and use another wireless technology - Xbee for example - to communicate to the units that are installed in the electrical outlets.