Return true if the given values are equal.
To determine equality, `Object.is()` is used first. If it returns
false, we do the following special checks:
- `Date` and `Date` with the same time
- `RegExp` and `RegExp` with the same pattern/flags
- object with the same keys and values (recursive)