improve iterDeps in some scenarios by 20-30% in v8, no noticeable downsides in other evergreen browsers

1. don’t enumerate keys, if no deps exist to produce keys
2. in v8 for (x in y) where y is non enumerable deopts entire function [readmore](https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#5-for-in)
3. minor: avoid deep property lookups like x[y][z] if we already have a reference to x[y]
improve debug-ability
reduce overhead from pointless iterdep calls
don’t > on undefined
isKeyPath is also called a ridiculous amount of times on with the same args.. Such cache candidate
reintroduce guid’s for SimpleHandlebarsView

This guids are incredibly cheap, and enable a recent BB optimization
intern GUID_KEY
Merge pull request #5278 from emberjs/fix-iter-deps

Fix iter deps
Correct Spelling Mistake

Just a wee spelling mistake being eradicated from existence.
Merge pull request #5279 from jherdman/fix-spelling-mistake

Correct Spelling Mistake
Avoid reusing arguments as variable for easier debugging.
Merge pull request #5281 from trek/style-cleanup-test-helpers

Avoid reusing arguments as variable for easier debugging.
[BUGFIX] Do not assume null Ember.get targets are all globals

* Changes globals to only mean properties starting with $ or a capital letter.
* Changes normalizeTuple(obj, 'Foo') to resolve Foo as a global. This
  makes the behavior consistent with normalizeTuple(obj, 'Foo.bar') which
  already resolves Foo as a global (and looks up bar).
* Changes normalizeTuple(null, 'Foo') to resolve Foo as a global.
* Specs normalizeTuple('null', 'foo') to resolve to [undefined, '']. This
  is unfortunate but needed to keep getPath happy.

This code is old, and tricky to modify due to perf optimizations and
edge case behavior. It would be great to refactor more heavily at some
other date. I've spec'd out more of the current behavior and edge cases
in this commit.

Fixes #3760