Parent data fixes

Add some missing functionality to ParentData subclasses.

Fixes #474
diff --git a/packages/flutter/lib/src/rendering/custom_layout.dart b/packages/flutter/lib/src/rendering/custom_layout.dart
index ab300bf..b8ea63f 100644
--- a/packages/flutter/lib/src/rendering/custom_layout.dart
+++ b/packages/flutter/lib/src/rendering/custom_layout.dart
@@ -7,6 +7,14 @@
 
 class MultiChildLayoutParentData extends ContainerBoxParentDataMixin<RenderBox> {
   Object id;
+
+  void merge(MultiChildLayoutParentData other) {
+    if (other.id != null)
+      id = other.id;
+    super.merge(other);
+  }
+
+  String toString() => '${super.toString()}; id=$id';
 }
 
 abstract class MultiChildLayoutDelegate {
diff --git a/packages/flutter/lib/src/rendering/stack.dart b/packages/flutter/lib/src/rendering/stack.dart
index 946dc1c..b89f17a 100644
--- a/packages/flutter/lib/src/rendering/stack.dart
+++ b/packages/flutter/lib/src/rendering/stack.dart
@@ -192,7 +192,7 @@
   /// children in the stack.
   bool get isPositioned => top != null || right != null || bottom != null || left != null || width != null || height != null;
 
-  String toString() => '${super.toString()}; top=$top; right=$right; bottom=$bottom, left=$left';
+  String toString() => '${super.toString()}; top=$top; right=$right; bottom=$bottom; left=$left; width=$width; height=$height';
 }
 
 abstract class RenderStackBase extends RenderBox