crypto: introduce ECDH

cc @trevnorris 
As currently setup, it would be logically quickest to put this option ahead if `format` isn't sent. e.g.
```javascript
if (format && !encoding) {
  encoding = format;
  format = constants.POINT_CONVERSION_UNCOMPRESSED;
} else if (typeof format === 'string') {
  if (format === 'compressed')
    format = constants.POINT_CONVERSION_COMPRESSED;
  else if (format === 'hybrid')
    format = constants.POINT_CONVERSION_HYBRID;
  else
    throw new TypeError('Bad format');
} else {
  // Check if "format" is OK.
}
// Replace "f" with "format" for remaining code...
```