I believe in transitioning out employees who aren't working out, but it doesn't always have to be by firing.
A few years ago, I had an employee whose work was pretty good (although not stellar) but who frequently got frustrated and resentful over several demands of the job, snapped at people, and constantly needed to be talked down from freak-outs.
We had conversation after conversation about his attitude, and nothing changed, so I finally decided to try a different approach -- one that I now think was far more realistic at its core. I told him that I knew he was frustrated by these particular things but that they simply weren't going to change, that they were inherent parts of the job, and that I didn't want us to be constantly battling over them ... and that rather than trying to force himself into a job that obviously was making him frustrated and stressed, I wanted to see him figure out if he could really be happy in the position, knowing that the things he was complaining about weren't going to change. I asked him to take a couple of days and think about whether he wanted the job in its current form (as opposed to the job he kept trying to change it into), and that if he decided it just wasn't for him, there was no shame in that and we'd do everything we could to help him in the transition out.
A couple of days later, he told me that he had thought about it and realized he should move on. We had a really smooth transition over the next month, he trained his replacement, I helped him brainstorm about jobs he'd be happy in, and on his last day he told me that he was shocked that such a potentially awful conversation had actually been pleasant. Since he's been gone, he's stayed in touch, periodically sending me helpful leads and information.
He lives on in my mind as an example of how exasperating situations can work out with all parties happy. The key was taking away any hint of adversariness and genuinely talking honestly with each other.
Marcus Buckingham talks a bit about this in his book First Break All the Rules: What the World's Greatest Managers Do Differently. He points out that bad hires often aren't bad employees because they're stupid, obstinate, or insubordinate but rather because they are "miscast." Making this mental switch can change the entire way you deal with struggling performers, making the entire process much more pleasant for all involved.