crypto: introduce ECDH

cc @trevnorris 
Sure. I'd just suggest if you're doing the check here to do `args[0].As<Object>()` further down. Otherwise it'll do a `val->IsObject()` for every `Buffer::{Data,Length}()` call.