Bug 1111466 - [Stingray]Unpin card from context menu of app deck

1. Move logic of `serialize` and `deserialize` into card-like classes
2. Move CardStore, PipedPromise, and card-like classes into tv_shared folder
3. Implement dual mode of CardManager for App-Deck. Only Smart-Home can run CardManager in  `readwrite` mode. All other apps can only run CardManager in  `readonly` mode. CardManager now also have two *states* - `READY` and `SYNCING`. When CardManager are reading data from or writing data to CardStore, it is in `SYNCING` state.
4. Add unpin logic in App-Deck and sending `unpin` activity to Smart-Home.

https://bugzilla.mozilla.org/show_bug.cgi?id=1111466
We need to check if `this.pinToHomeElem.setAttribute('data-l10n-id', 'unpin');` works or not. If this works, we don't need to use `get('xxx');`