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
There is a semantic error in `line 42`:
```
launchURL: app.manifestURL + app.entryPoint,
```
The manifestURL may be: `app://xxxx.gaiamobile.org/manifest.webapp`. The entrypoint may be: `/whatever/path/index.html`. If we just merge them, we may have a totally wrong url, like: `app://xxxx.gaiamobile.org/manifest.webapp/whatever/path/index.html`

This will be a serious issue.