Client

#### 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 [`app.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.