I use a combination of Google Voice and GrooveIP to take and make calls over WiFi. It seems to work well and it is completely free.
Basically you will get a number from Google Voice and in the GV settings direct it to route the call to Google Chat. When someone calls that number GrooveIP (logged into to Google Chat) will ring your phone. Conversely you can make calls through GrooveIP which will rout the call through Wifi to Google Voice.
Long as you pick a number that is local to the people who are calling it should be a transparent and free call.