Addresses issues in the first review.

- Using `WhiteboxContext`
- "Tying the knot" with implicits for the case of recursive case classes
- Generating unique names for implicits per type