This is an important question and you make a number of points worth thinking about more deeply. I offer the following not as an answer, but as a formal prelude to more worthy answers. We start with relations:
§1. n-ary Relations as Sets of n-tuples
According to the standard set-theoretic account of relations, an n-ary relation R is nothing more or less than a set SR consisting of n-tuples of elements from n underlying domains. Some examples:
- The binary relation Taller, for example, is the set STaller = {(x, y) : x is taller than y}.
- The unary relation (or predicate) Prime, is the set SPrime = {(x) : x is prime}, where the weird 1-tuple (x) can be identified either directly with the individual x or the ordered pair (x, x).
- The ternary relation Closer, is the set SCloser = {(x, y, z) : x is closer to y than to z}.
As you rightly noted, the properties of binary relations have been paid a lot of attention to. We are exposed to reflexive, serial, euclidean, transitive, symmetric, equivalence, ... relations with increasing emphasis in philosophical logic courses, and so on. We rarely come across treatments of more than binary relations. While I do not know what the reason for that is, I suspect it has something to do with the theoretical dispensability of relations of higher arities. Here's why they're theoretically dispensable.
§2. n-tuples as nested ordered pairs
Since from the set-theoretic point of view, an n-ary relation is just a set of n-tuples, it is possible to reduce an arbitrary n-ary relation to a binary one. We start either by defining the ordered pair (a,b) in terms of sets (by Kuratowski's or Wiener's or some such method) or taking it as a primitive so long as the equivalence [ (a,b) = (c, d) iff a = c and b = d ] holds. Having defined the ordered pair, the 2-tuple, we can then define triples (a, b, c) as the pairs (a, (b, c)), quadruples as the pairs (a, (b, (c, d))), and in general n-tuples (a1, a2, ..., an) as the pairs (a1, (a2, (..., an)). Let's apply this to your example:
- The ternary relation GivesGift is the set G = {(x, y, z) : person x gives gift y to person z}, where we have two types DPeople of persons and DGifts of gifts and x, z ∈ DPeople and y ∈ DGifts. For the sake of concreteness let's assume DPeople = {Ruddy, Saul}, and DGifts = {Meaning and Necessity}. We express "Ruddy gives Meaning and Necessity to Saul" as GivesGift(Ruddy, Meaning and Necessity, Saul), which is true just in case (Ruddy, Meaning and Necessity, Saul) ∈ G. By the previous technique, we can represent G as G' = {(x, (y, z)) : person x gives gift y to person z}, and instead give the truth-conditions of that proposition as: true just in case (Ruddy, (Meaning and Necessity, Saul)) ∈ G'. The difference is that G is ternary and G' is binary, but they are functionally identical.
By the same technique, any other n-ary relation can be reduced to a binary one. Needless to say, this doesn't mean that non-binary relations aren't worth classifying and investigating.