Any of the choices except dry will be fine in most use cases. (This assumes a medium strength threadlocker).
Lubrication on torque-sensitive fasteners is important. When your goal is to achieve a certain amount of thread preload, you need to reduce factors that cause your torque input to result in some amount less preload. You can measure torque, but not preload. The list of such potential factors is long (materials, finish, tolerances, condition, quality of machining, etc.), and lubrication vastly reduces the effects of most of them. Lubrication also prevents corrosion from seizing the fastener.
Grease and anti-seize do a similar job of reducing the effects of these sources of added friction. Anti-seize is better in very corrosive environments. It has the downside of being very messy to work with and has some material compatibility concerns that should be abided by. The major one that comes up with bikes is that theoretically, copper anti-seizes can cause failures in stainless parts by "inter-crystalline corrosion which can cause parts to crack or break when under heavy loads." Stem bolts are an area where this is a factor since many stem bolts are stainless. I have no idea what it would take to get the copper-on-stainless issue to occur on stem bolts, but using a silver grade (aluminum base) is better. Anti-seize is fine to use if it's what you have or if the application has specific corrosion or galling concerns, but otherwise is overkill. The messiness factor is real if you're working with it often.
Grease is the norm for most bike applications, including stem bolts, and will usually provide all the lubrication and corrosion protection needed. In the kinds of heavily corrosive environments bikes need to deal with (maritime, salted roads, etc.), using anti-seize over grease offers marginal safeguards, but grease is typically enough to prevent seizure even over a long service life. The basket cases tend to involve parts that were assembled dry.
Medium-strength threadlocker does an acceptable job of providing lubrication and blocking out corrosion while adding protection against the threads backing out. The main reason it would ever back out in a stem or most other applications on a bike is inadequate torque - this is not a concern in most cases otherwise. Stem manufacturers probably like that it provides a degree of safeguard against poor installation while doing everything else needed, so it's found a home on stem bolts. Compared to the alternatives, threadlocker is most likely to stop working with repeated installations since it will flake off when the bolts are out, so it does have the disadvantage of potentially needing to be re-applied where the other two are more persistent.