crypto: introduce ECDH

cc @trevnorris 
Docs say `ECDH.getPublicKey([encoding], [format])`. I interpret that as `getPublicKey([encoding][, format])`, not `getPublicKey([encoding[, format]])`. Right now the logic requires the latter. Meaning it would need to be called like `getPublicKey(null, 'compressed');`.

If the latter is what the docs are meant to say then I'd suggest updating the optional parameters syntax to look like what I've written here (honestly all the Node docs have the optional parameters syntax incorrect). If not, how do you plan on allowing the parameters to fall? Meaning, how do you plan on detecting that the call was made using `getPublicKey(<format>)`?