Client ID

#### What's this PR do?

Automatically generates the `clientId` for a new visitor and uses an existing value from `localStorage` if it is found.

#### Where should the reviewer start?

in [`start.js`](https://github.com/quickleft/tv/commit/e92657b28112ed82b2916fcdabd88d331a42af6b#diff-d49ca49770a67a5197dea7520cc4c4ffR12) the `#install` method is called, which does a few things:

1.  Checks to see if `localStorage` has a `clientId` value
2.  If `localStorage` _does_ have a value, it does nothing further.
3.  If `localStorage` does not have a value, it creates a new one and stores it

#### How should this be manually tested?

Load up the debugger console, check `localStorage` to verify that a value does not exist, load this branch and see that it populates it on page load.  Then refresh, noticing that the value remains the same.  Clear the value from `localStorage` and reload, noticing that a new value is injected.
Let's provide a layer of dependency inversion between the store (localStorage) and our class. That way we can shim it with something else under test, or otherwise provide an alternate store without affecting our underlying implementation.