console: `console.dir()` bypasses inspect() methods

Use the `customInspect: false` option of `util.inspect()` to bypass any custom
inspect() function on the object being logged.

Closes #2717.
util: custom `inspect()` method may return an Object

This is more like how `JSON.stringify()` works.
Closes #2711.
crypto: split crypto classes
crypto: merge Cipher and Decipher
crypto: refactor crypto classes
crypto: replace BIO_free with BIO_free_all

From OpenSSL's documentation:

"If BIO_free() is called on a BIO chain it will only free one BIO
resulting in a memory leak."

and

"BIO_free_all() frees up an entire BIO chain, it does not halt if an
error occurs freeing up an individual BIO in the chain"
doc: fix inpect() -> inspect() typo