[Update 19sept13]: If you're on iOS7 - see my new post on built-in call blocking for iOS7.
It is possible to do reasonable job of blocking/blacklisting calls on your iPhone without any additional apps (or jailbreak) with iOS 6 by using the new 'Do Not Disturb' feature in the iPhone Settings app.
The way it works is to create a list of people you would like to receive calls from, and so anyone not on that list will be sent straight to voicemail - effectively blocked. The simplest way is to add all the people you want to receive calls from to your favourites (Alternatively you can use 'groups' created in your address book but you can only create groups using another app or on your desktop). Then you open the Settings app and go to: 'Settings -> Notifications -> Do Not Disturb -> Allow Calls From'
and then tick 'Favourites'. If you want to make sure you don't receive repeated calls from any blocked person you also need to turn off the 'Repeated Calls' switch in 'Settings -> Notifications -> Do Not Disturb'. Then you go back to the main menu of the Settings app and turn on the 'Do Not Disturb' switch.
Your phone will now ignore all calls that are not from your favourites, the only other issue is that other alerts will get silenced so it's not a perfect solution but it probably works till most problem callers lose interest. It would be handy if Apple would make call blocking easier.
If you've jailbroken (e.g. using evasi0n) your phone then you can pay for an app that does a better job of just blacklisting calls called iBlacklist (which you can get from Cydia).