For the most consistent results, a spare fridge or chest freeze and a Johnson control is the best setup. No need for a Stopper Thermowell, just tape the temperature probe to the outside of carboy, and cover the probe with a scrap piece of styrofoam and tape -- that way, you ensure you are getting the temperature of the wort rather than the ambient fridge temperature.
To cool, just plug the fridge/freeze into the Johnson controller (set on cooling setting), with a 2 degree variance. Keep in mind that the recommended fermentation temperatures written on the side of the yeast bottle are mostly wrong -- consult with Brewing Classic Styles for a good indication of the fermentation temperature for a particular style.
If you were doing a classic German Pilsener, you might start your fermentation temperature at 50F for the first 10 days of fermentation, then bump it up to 60F to drive off diacetyl, then slowly reduce the temp over a period of several days down to a lagering temperature of 36F for 30 days. Then bottle (with priming sugar), or keg. I will often drop the temp on ales as well to 36F for several days before bottling, as it aids in clearing the beer.
To heat, you can use a number of different heating sources. I use a dehydrator bottom, but others use a low wattage space heater, a heating pad, a Brew Belt, an Electric Fermentation Heater wrap, or even a low-wattage light bulb. Be cautious when choosing a heating source to avoid fire and appliance warping. Both Northernbrewer.com and Morebeer.com have a variety of heating sources. Again, using the Johnson controller, just plug your heating source into the controller (set on the heating setting).
Also, because you are maintaining the optimum fermentation temperature, you are also likely to generate lots of blowoff during the first couple of days of fermentation. I recommend that you use a large blowoff tube placed into a milk jug of water.
See Düsseldorf Domination! for an example of a fridge/digital controller/blowoff setup.