crypto: introduce ECDH

cc @trevnorris 
If `encoding` is always required, why make that the second argument? IMO it's better JS API practice to place required arguments furthest to the left as possible.