Rework the key functionality.

Key points are:

* Avoid copying in `from_slice()`
* Generalize Compressed/Uncompressed Public Key over both:
  * enum
  * trait