Use equalA and context bounds for Equal.

 * Use `Equal.equalA` for constructing the `Equal[HardCore]` instance.
 * Use `implicit val` where possible.
 * Use context bounds for `Equal`.

Let me know if you need any changes done.

Cheers