Extract (jsToFay|fayToJs)UserDefined to runtime.js
Extract type argument evaluation to runtime.js

This replaces code like this
```
  Fay$$jsToFay(
    ["user","Observable",[["user","Vector",
      [argTypes && (argTypes)[0]
        ? (argTypes)[0]
        : (type)[0] === "automatic"
          ? ["automatic"]
          : ["unknown"]]]]
    ],
    obj["itemsOnCurrentPage"])
```
with
```
  Fay$$jsToFay(
    Fay$$evalType(
      type,
      ["user","Observable",[["user","Vector",[{"arg": 0}]]]]),
    obj["itemsOnCurrentPage"])
```
which will be helpful in the next commit.
Use typeRep to guide fayToJs serialization

This replaces
```
  Fay$$fayToJsHash[$_Prelude$Just.name] = function(type,argTypes,_obj){
    var obj_ = {"instance": "Just"};
    var obj_slot1 = Fay$$fayToJs(Fay$$evalType(type,{"arg": 0}),_obj.slot1);
    if (undefined !== obj_slot1) {
      obj_["slot1"] = obj_slot1;
    }
    return obj_;
  };
```
with
```
  Fay$$fayToJsHash[$_Prelude$Just.name] = ["Just",["slot1",{"arg": 0}]];
```
There is some performance regression here because `fayToJs` calls are not
specialized (as in `translator` function).
I promise this will be fixed in one of the upcoming commits.
Use typeRep to guide jsToFay serialization
Use constructor name as an instance tag

I'm not sure if this change is valid (it breaks lots of tests but only those
that assert specific values for `instance` field).

It is valid only if tags are not used for anything but serialization.
E.g. Google Closure compiler can rename constructiors and hence tags also will
be renamed.