taken from #401, #149
The goal is to allow people to create es class in a type safe way, mostly code pattern as below:
function Set(data){
this.data = data
}
Set.prototype.toString = function(){
return "" + this.data
}
inheritance support is a non-goal