Text Shadow Generator
There are lots of great answers here. It would appear the text-shadow is probably the most reliable way to do this. I won't go into detail about how to do this with text-shadow since others have already done that, but the basic idea is that you create multiple text shadows around the text element. The larger the text outline, the more text shadows you need.
All of the answers submitted (as of this posting) provide static solutions for the text-shadow. I have taken a different approach and have written this JSFiddle that accepts outline color, blur, and width values as inputs and generates the appropriate text-shadow property for your element. Just fill in the blanks, check the preview, and click to copy the css and paste it into your stylesheet.
Needless Appendix
Apparently, answers that include a link to a JSFiddle cannot be posted unless they also contain code. You can completely ignore this appendix if you want to. This is the JavaScript from my fiddle that generates the text-shadow property. Please note that you do not need to implement this code in your own works:
function computeStyle() { var width = document.querySelector('#outline-width').value; width = (width === '') ? 0 : Number.parseFloat(width); var blur = document.querySelector('#outline-blur').value; blur = (blur === '') ? 0 : Number.parseFloat(blur); var color = document.querySelector('#outline-color').value; if (width < 1 || color === '') { document.querySelector('.css-property').innerText = ''; return; } var style = 'text-shadow: '; var indent = false; for (var i = -1 * width; i <= width; ++i) { for (var j = -1 * width; j <= width; ++j) { if (! (i === 0 && j === 0 && blur === 0)) { var indentation = (indent) ? '\u00a0\u00a0\u00a0\u00a0' : ''; style += indentation + i +"px "+ j +"px "+ blur +"px "+ color +',\n'; indent = true; } } } style = style.substring(0, style.length - 2) +'\n;'; document.querySelector('.css-property').innerText = style; var exampleBackground = document.querySelector('#example-bg'); var exampleText = document.querySelector('#example-text'); exampleBackground.style.backgroundColor = getOppositeColor(color); exampleText.style.color = getOppositeColor(color); var textShadow = style.replace(/text-shadow: /, '').replace(/\n/g, '').replace(/.$/, '').replace(/\u00a0\u00a0\u00a0\u00a0/g, ''); exampleText.style.textShadow = textShadow;}