https://github.com/mwganson/ThreadProfile
Now available to install in the addon manager, you should see ThreadProfile listed in the workbench tab. Full documentation is available at the above link. Thanks to yorik and Kunda1 for helping me with that.
The ThreadProfile workbench can be used to create a parametric 2d thread profile object compatible with both Part and Part Design workbenches. It looks like a circle, but it isn't. It is a cross section of a thread profile. When the thread profile is swept along a helix (which helix can be created in the ThreadProfile workbench) it creates the thread.
To use in Part Design just drag and drop the ThreadProfile object into the Body, just as you would drag and drop a sketch. You can then use the same operations you would use on a sketch. If you wish to make external threads you should use the Additive Pipe sweep. If you wish to make internal threads you should use the Subtractive Pipe to cut the threads out of another object, perhaps a padded hexagon. To use in Part workbench use the sweep tool. If it is an external thread you are done, but if it is internal you need to cut it out of some other object with a boolean cut.
So far, all of the threads I have produced with this (has not been so many) have passed Check Geometry with BOP check enabled.
Here is a demonstration video where I show it in both Part and Part Design.
The ThreadProfile object is basically a Draft BSpline with additional properties and capabilities. In fact, I used the Draft BSPline code as a starting point. As you can see in the video the performance leaves something to be desired. I have a Quality property you can use to speed things up some, at the expense of degraded quality of the thread profile. The default quality of 1 uses 720 points to produce the thread profile, 2 points per degree. If you change to quality = 2, it only uses 360, 3 uses 240, etc. Quality=12 would only use 60 points. I recommend leaving the default setting, but you experiment with it if you like.
If you create the helix in the workbench it will be parametrically linked to the ThreadProfile object. If you change the pitch in the ThreadProfile object the helix pitch will update with it. The helix height is linked to the ThreadProfile pitch and thread count properties. If you change the placement of the ThreadProfile object prior to creating the helix, the helix will inherit the ThreadProfile's placement, but this is not parametric. If you move the ThreadProfile you will have to also move the helix. If you create the helix in the part workbench it will not be linked parametrically at all.
Note: this uses the pitch and the minor diameter (not the nominal diameter). You need to look up the minor diameter for your thread. I don't have this automatically done at this time and probably never will. But I have a menu command to open a couple different online calculators (one for metric the other for ANSI) in your default web browser.
The same profile is used for both metric and inch sizes, which they're both basically the same 60 degree profile. The ANSI specification doesn't call for rounded roots, but it is permissible to have them, so I think there is no need for separate profiles. It is possible to add more profiles in the future, for example, I could add an ACME profile I think without so much difficulty.