[ENH] Option to accumulate SASA by residue

Implements the same ideas as https://github.com/rmcgibbo/mixtape/pull/267. Instead of doing the accumulation with numpy as in that PR, I moved it inside the C kernel to save memory (such that when using `mode='residue'`, no temporary arrays of size `n_frames` x `n_atoms` are created.)