tfjson: Add `DeferredChanges` and `Complete` to `Plan` JSON (#123)

* initial deferred response support

* add `complete` flag
diff --git a/plan.go b/plan.go
index 38ea778..67a5b6e 100644
--- a/plan.go
+++ b/plan.go
@@ -60,6 +60,14 @@
 	// plan.
 	ResourceChanges []*ResourceChange `json:"resource_changes,omitempty"`
 
+	// DeferredChanges contains the change operations for resources that are deferred
+	// for this plan.
+	DeferredChanges []*DeferredResourceChange `json:"deferred_changes,omitempty"`
+
+	// Complete indicates that all resources have successfully planned changes.
+	// This will be false if there are DeferredChanges or if the -target flag is used.
+	Complete bool `json:"complete,omitempty"`
+
 	// The change operations for outputs within this plan.
 	OutputChanges map[string]*Change `json:"output_changes,omitempty"`
 
@@ -269,3 +277,13 @@
 	// The value for this variable at plan time.
 	Value interface{} `json:"value,omitempty"`
 }
+
+// DeferredResourceChange is a description of a resource change that has been
+// deferred for some reason.
+type DeferredResourceChange struct {
+	// Reason is the reason why this resource change was deferred.
+	Reason string `json:"reason,omitempty"`
+
+	// Change contains any information we have about the deferred change.
+	ResourceChange *ResourceChange `json:"resource_change,omitempty"`
+}