+1 for y5. It's free, it's simple, and it works well. It remembers your location by relative signal strength of nearby cell towers and turns your wifi on and off accordingly.
Very cool.
I wish there were something similar for Bluetooth where it could turn itself on or off depending on if a known Bluetooth device was nearby, e.g. car stereo.
I never liked y5 because it required a good 2 mile radius for location (since gps would obviously waste more battery than you'd save). The problem was that if I went anywhere that was around a mile away, wifi would stay on, and I couldn't turn it off. Y5 kept overriding that and turning it back on, causing it to scan. There are many, many tasker threads out there, but basically, I use tasker to turn off wifi when not near a remembered location, like y5, but when near a remembered location, instead of turning wifi on, it turns wifi on every 10 minutes, then off if it can't connect. Tasker referes to it as "wifi near".
For bluetooth, it's not as simple because most of your bluetooth devices don't stay in the same geographic location. With tasker, you could probably make a profile that would turn bluetooth on at specified intervals to see if it could connect. That would probably be a battery drain, and might be complicated to set up. If you look at the to-do list for tasker, you'll see, though, that "bluetooth near" is on the list:
Tasker for Android
As for the potential battery drain, you'd want to make sure you limit the "bluetooth near" check to times when you know you'll be driving, or even only when the phone is plugged in.
EDIT: And despite "bluetooth near" not being an available tasker context yet, you can still do stuff with tasker to make it turn on bluetooth when you're probably going to be using it, like when you go into car mode, or when you plug the phone in, or between certain hours, etc.