Steam cleaning is best, but if you want to DIY i've had good success with a can of store bought engine degreaser (i think the brand name is "Gunk" or something like that. Might also be called engine-brite
Spray liberally on everything, but i always avoid obvious electrical items (battery terminals, ECU if applicable, alternator)
Let it sit and scrub real tough spots
rinse off with a very light mist on the hose.
For all you guys that use a pressure washer... you realize there is no advantage to it. It just shoots water where it shouldn't go. The less water you can use the better (and better for th environment). The cleaning agent is what loosens the dirt, not the water.... especially grease. Grease is unaffected by water (thus why people use WD-40 and waxoyl for rust proofing) spraying it at 5000PSI isn't going to do a darn thing.
I've used simple green before but the results were lacking compared to the degreaser you can buy in any auto parts store