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
Since the detail is the same structure. Why not to put `pinned` state to detail object? If so, we may only have one field instead two the same fields with different semantic and the code may be more clear.