Traits
Declared like an implementation, but with no function bodies. Can have a body, which becomes the default implementation. Like C# abstract classes.
You can implement external traits on internal types, and internal traits on external types, but not external traits on external types.
Traits as function parameters is a bit weird. We have to use &impl DoAThing instead of just the trait name.
The above is syntactic sugar for (trait bound syntax):
I think I prefer the trait bound syntax.