Symbol discovery

This tremendous yak shave brought to you by the inability to eagerly register symbols in Swift.
This is necessary because [`union`s are invisible to Swift even when they only have a single field](http://www.openradar.me/19192347).