improve mat44 implementation

this will make it easier to create matrices of different sizes

Change-Id: I2c1771ba0823c42d737762e2dfc2cd47eb302767
diff --git a/include/ui/vec4.h b/include/ui/vec4.h
index 798382d..e03d331 100644
--- a/include/ui/vec4.h
+++ b/include/ui/vec4.h
@@ -26,7 +26,8 @@
 // -------------------------------------------------------------------------------------
 
 template <typename T>
-class tvec4 :   public TVecArithmeticOperators<tvec4, T>,
+class tvec4 :   public TVecProductOperators<tvec4, T>,
+                public TVecAddOperators<tvec4, T>,
                 public TVecUnaryOperators<tvec4, T>,
                 public TVecComparisonOperators<tvec4, T>,
                 public TVecFunctions<tvec4, T>
@@ -85,6 +86,13 @@
     template<typename A>
     explicit tvec4(const tvec4<A>& v) : x(v.x), y(v.y), z(v.z), w(v.w) { }
 
+    template<typename A>
+    tvec4(const Impersonator< tvec4<A> >& v)
+        : x(((const tvec4<A>&)v).x),
+          y(((const tvec4<A>&)v).y),
+          z(((const tvec4<A>&)v).z),
+          w(((const tvec4<A>&)v).w) { }
+
     template<typename A, typename B>
     tvec4(const Impersonator< tvec3<A> >& v, B w)
         : x(((const tvec3<A>&)v).x),