function jsEvalToValues(expr) {
  // TODO(mesch): It is insufficient to split the values by simply
  // finding semi-colons, as the semi-colon may be part of a string
  // constant or escaped.
  var ret = [];
  var values = expr.split(REGEXP_semicolon);
  for (var i = 0, I = jsLength(values); i < I; ++i) {
    var colon = values[i].indexOf(CHAR_colon);
    if (colon < 0) {
      continue;
    }
    var label = stringTrim(values[i].substr(0, colon));
    var value = jsEvalToFunction(values[i].substr(colon + 1));
    ret.push(label, value);
  }
  return ret;
}
Parses the value of the jsvalues attribute in jstemplates: splits
it up into a map of labels and expressions, and creates functions
from the expressions that are suitable for execution by
JsEvalContext.jsexec(). All that is returned as a flattened array
of pairs of a String and a Function.

@param {string} expr

@return {Array}