add free and bound identifier sets

Still need to add docs, but wanted to see if anyone had feedback.

I will squash when done.
Is it possible to use `for/list` here or is that a bad idea?