Fixed bug when using T.Object as root config together with saveConversions = true

I ran across a fascinating problem where Joi starts adding circular references to the top level object if you validate it using `T.Object()` while having `saveConversions` enabled.

When fixing that I ran across some other bugs (kinda bug-chain) which I also fixed.

- Fixed bug when using `T.Object` as root config together with `saveConversions` = `true`.
- Fixed wrong error message for invalid numbers.
- Improved error handling (wrong errors, redundant errors, invalid keypaths).
- Added shortcut function `(type).noShortCircuit()` which sets `.options.shortCircuit` to `false`.
- Added checks for `.options.shortCircuit` in various more locations where the option was not considered.
- Improved how unknown object keys will be handled (added test cases for that).
- Added various tests for bugs which have been fixed.