Fixes to Record

Record's equals() was incorrectly returning false when falling through to default values. This was due to another issue where Records were not being properly iterated over, ignoring default values.

This also improves documentation to better express the changes made in v3 to Record and improves how Record names are determined.
Ensure Symbols are handled by mixin