General algorithms for computing genetic kinship likelihoods