In response to Part B:
The software tool needs to be extensible to enable users to respond to changing societal circumstances or genealogical practices.
For example; if the program has a category of data called "Relationships" and offers suggested labels for instances such as Married, Civil union, De facto etc, then it should also allow the user to add to that list of suggestions. There may not be too much demand for the relationship label "IVF gamete donor" but the few people who need it should be able to add it in.
GRAMPS is one example of a package that does this fairly well. Most drop-down lists include a label "other" or "unknown" than can be over-written to suit particular circumstances. (It has a fixed view of gender, however.)
In addition, if the software is Open Source, then there will be a mechanism for (groups of) end-users to modify the underlying code to make their extensions available to others and to advocate for global changes to the codebase.
As noted in other answers, any attempt to build a tool with the comprehensive list of non-traditional relationships is doomed to failure. The day after you release it, someone will suggest another variation.