Freeze shallowly frozen objects and offer a faster option

* `deep_freeze` is 50% slower than before the commit, but will deep
  freeze shallowly frozen objects (fixing #10).
* `fast_deep_freeze` is 2.5x faster than previous deep_freeze, with the
  exact same behavior.
Fix unit tests
Add documentation and tests
Add integration tests for fast_deep_freeze
Don't expose RecursionGuard arguments in any `@api public` methods
RecursionGuard::ObjectSet#guard should always return an object

Suggested by @dkubb, for consistency with RecursionGuard::Frozen#guard
Fix spec description

Pointed out by @dkubb
Remove outdated @param doc
Rename `fast_deep_freeze` -> `deep_freeze!`
Update yardoc syntax

Suggested by @dkubb
Add optional Object#deep_freeze!
Remove extra blank comment line
Spec updates suggested by @dkubb
Stop offending RuboCop
Get max method statements down to 4
Merge pull request #11 from misfo/fast-or-thorough-deep-freezes

Freeze shallowly frozen objects and offer a faster option