How about CAPTCHA for unknown calls - numbers not in your contact list will be required to answer something only a human is capable of answering before getting through to you.
Or another approach that Google does with Google Voice is to ask the caller to identify before the call goes through. Then the phone rings on your side and you hear the name of the caller before you decide to answer.