Refactor some unwinding code

Make some things owned by the cf rather than using global registries,
so that 1) we can eventually free the right things when we start freeing
cf's, and 2) we can have a single ip->cf mapping instead of lots of
ip->other things mappings.

Also added some helper classes for making stack crawling easier.
Merge remote-tracking branch 'upstream/master'

Conflicts:
	.gitignore