Add db.UniqueMixin and adjust pylint as necessary with new ignores

Adds a helper method to get existing rows, which also adds if not already existing.

The caching was needed to get 'same object' support (otherwise row1 == row2 would even fail)

I suspect this will be ok, given session lengths, but I'm open to arguments against that. (or arguments about purging the cache based on length/time in some way)  I'd rather not block on those improvements though unless this proves to be a real issue.