If you get an android phone you can use google's wifi calling program called google voice. In my opinion that is the best way to go. Some tmobile phones also allow wifi calling but i'm not sure which ones.
First you need to get a VoIP service. Then you need an internet connection then download Fring or SJphone for Windows Mobile (I assumed you have WM phone) then you can configure your VoIP service from there.
Fring has support for almost all mobile phones out there. I use Fring on my HTC phone using Onesuite VoIP service and it works perfectly.