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 so, the code of this part may be:
```
onFocus: function cm_onFocus(detail) {
  this.focused = detail;
  if (detail) {
    this.pinToHomeElem.label = navigator.mozL10n.get(detail.pinned ? 'unpin' : 'pin-to-home');
  }
};
```