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
If we have `launchURL` in `pin` activity, we should have the same field in `unpin` activity because an app can have different launchURL pinned to home. If we don't add that, smart home may not know which one needs to remove.