use embedded interface types

R=r
DELTA=205  (1 added, 157 deleted, 47 changed)
OCL=25071
CL=25073
diff --git a/src/lib/reflect/value.go b/src/lib/reflect/value.go
index 8d15a8e..ba430c2 100644
--- a/src/lib/reflect/value.go
+++ b/src/lib/reflect/value.go
@@ -66,11 +66,7 @@
 // -- Missing
 
 type MissingValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
+	Value;
 }
 
 type missingValueStruct struct {
@@ -84,12 +80,7 @@
 // -- Int
 
 type IntValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	int;
 	Set(int);
 }
@@ -113,12 +104,7 @@
 // -- Int8
 
 type Int8Value interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	int8;
 	Set(int8);
 }
@@ -142,12 +128,7 @@
 // -- Int16
 
 type Int16Value interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	int16;
 	Set(int16);
 }
@@ -171,12 +152,7 @@
 // -- Int32
 
 type Int32Value interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	int32;
 	Set(int32);
 }
@@ -200,12 +176,7 @@
 // -- Int64
 
 type Int64Value interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	int64;
 	Set(int64);
 }
@@ -229,12 +200,7 @@
 // -- Uint
 
 type UintValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	uint;
 	Set(uint);
 }
@@ -258,12 +224,7 @@
 // -- Uint8
 
 type Uint8Value interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	uint8;
 	Set(uint8);
 }
@@ -287,12 +248,7 @@
 // -- Uint16
 
 type Uint16Value interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	uint16;
 	Set(uint16);
 }
@@ -316,12 +272,7 @@
 // -- Uint32
 
 type Uint32Value interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	uint32;
 	Set(uint32);
 }
@@ -345,12 +296,7 @@
 // -- Uint64
 
 type Uint64Value interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	uint64;
 	Set(uint64);
 }
@@ -374,12 +320,7 @@
 // -- Uintptr
 
 type UintptrValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	uintptr;
 	Set(uintptr);
 }
@@ -403,12 +344,7 @@
 // -- Float
 
 type FloatValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	float;
 	Set(float);
 }
@@ -432,12 +368,7 @@
 // -- Float32
 
 type Float32Value interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	float32;
 	Set(float32);
 }
@@ -461,12 +392,7 @@
 // -- Float64
 
 type Float64Value interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	float64;
 	Set(float64);
 }
@@ -490,12 +416,7 @@
 // -- Float80
 
 type Float80Value interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	float80;
 	Set(float80);
 }
@@ -522,12 +443,7 @@
 // -- String
 
 type StringValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	string;
 	Set(string);
 }
@@ -551,12 +467,7 @@
 // -- Bool
 
 type BoolValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	bool;
 	Set(bool);
 }
@@ -580,12 +491,7 @@
 // -- Pointer
 
 type PtrValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Sub()	Value;
 	Get()	Addr;
 	SetSub(Value);
@@ -621,12 +527,7 @@
 // Slices and arrays are represented by the same interface.
 
 type ArrayValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	IsSlice()	bool;
 	Len()	int;
 	Cap() int;
@@ -759,12 +660,7 @@
 // -- Map	TODO: finish and test
 
 type MapValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Len()	int;
 	Elem(key Value)	Value;
 }
@@ -789,11 +685,7 @@
 // -- Chan
 
 type ChanValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
+	Value;
 }
 
 type chanValueStruct struct {
@@ -807,12 +699,7 @@
 // -- Struct
 
 type StructValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Len()	int;
 	Field(i int)	Value;
 }
@@ -846,12 +733,7 @@
 // -- Interface
 
 type InterfaceValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
-
+	Value;
 	Get()	interface {};
 }
 
@@ -870,11 +752,7 @@
 // -- Func
 
 type FuncValue interface {
-	// TODO: Value;
-	Kind()	int;
-	Type()	Type;
-	Addr()	Addr;
-	Interface()	interface {};
+	Value;
 }
 
 type funcValueStruct struct {