I hate to bring up my little kludge system, but...

I actually have IncrediblePBX running on a Raspberry PI, with an IPComms SIP trunk and Google Voice. It has an old Linksys/Sipura SPA-921 deskset that came out of an old office, and I have Zoiper on my iPhone as a second extension over WIFI.
Inbound calls hit the IPComms trunk, which is $0 for inbound, and outbound calls use Google Voice, which is $0 for outbound.

I did spend $35 for the PI.