For my 3.2.5 project I am recording study subject and their relations, for this I created three tables 'parties' and two subclasses 'persons' and 'institutions', parties can be related to each other in any which way.
I have a contacts table with 'party_id' and 'related_id' and a relation 'type'. Relation types can be 'directional' or not: you can have a parent-child relation that states who is parent and who is child, but also a 'partner' type, which is unidirectional. Types and their directionality and between which party types they can be created are in a table as well.
Directionality has some consequences for queries, but I do not see a way around them: to find all contact records for a person you need to search in both 'party_id' and 'related_id' columns. Not too bad when you are just looking at one party, but becomes quite inefficient when you want to build a tree view of relationships in the system (family tree and such).
I am also still tweaking a good UI for making relations, using the contacts table to type-cast parties by leaving the 'related_id' NULL.
I also use this system to keep track of foreign database unique IDs to link systems together. In all, it works rather nicely for me and would be trivial to adapt to user records in 3.2.5. You can have the code and datamodel, if you want.