Replace SignedMetadata::signed with an AsRef impl

This lets this method be used a little more generically.
diff --git a/src/client.rs b/src/client.rs
index 66ba630..b596472 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -259,7 +259,7 @@
             config.min_bytes_per_second,
             None,
         )?;
-        let latest_version = latest_root.signed().version();
+        let latest_version = latest_root.as_ref().version();
 
         if latest_version < tuf.root().version() {
             return Err(Error::VerificationFailure(format!(
@@ -536,7 +536,7 @@
                             current_depth + 1,
                             target,
                             snapshot,
-                            Some(meta.signed()),
+                            Some(meta.as_ref()),
                             local,
                             remote,
                         );
diff --git a/src/metadata.rs b/src/metadata.rs
index c2b1edd..4854ba7 100644
--- a/src/metadata.rs
+++ b/src/metadata.rs
@@ -232,7 +232,8 @@
 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
 pub struct SignedMetadata<D, M> {
     signatures: Vec<Signature>,
-    signed: M,
+    #[serde(rename="signed")]
+    metadata: M,
     #[serde(skip_serializing, skip_deserializing)]
     _interchage: PhantomData<D>,
 }
@@ -274,7 +275,7 @@
         let sig = private_key.sign(&bytes)?;
         Ok(SignedMetadata {
             signatures: vec![sig],
-            signed: metadata,
+            metadata,
             _interchage: PhantomData,
         })
     }
@@ -321,7 +322,7 @@
     /// # }
     /// ```
     pub fn add_signature(&mut self, private_key: &PrivateKey) -> Result<()> {
-        let raw = D::serialize(&self.signed)?;
+        let raw = D::serialize(&self.metadata)?;
         let bytes = D::canonicalize(&raw)?;
         let sig = private_key.sign(&bytes)?;
         self.signatures
@@ -331,10 +332,10 @@
     }
 
     /// Merge the singatures from `other` into `self` if and only if
-    /// `self.signed() == other.signed()`. If `self` and `other` contain signatures from the same
+    /// `self.as_ref() == other.as_ref()`. If `self` and `other` contain signatures from the same
     /// key ID, then the signatures from `self` will replace the signatures from `other`.
     pub fn merge_signatures(&mut self, other: &Self) -> Result<()> {
-        if self.signed() != other.signed() {
+        if self.metadata != other.metadata {
             return Err(Error::IllegalArgument(
                 "Attempted to merge unequal metadata".into(),
             ));
@@ -366,11 +367,6 @@
         &mut self.signatures
     }
 
-    /// An immutable reference to the metadata.
-    pub fn signed(&self) -> &M {
-        &self.signed
-    }
-
     /// Verify this metadata.
     ///
     /// ```
@@ -443,7 +439,7 @@
             .map(|k| (k.key_id(), k))
             .collect::<HashMap<&KeyId, &PublicKey>>();
 
-        let canonical_bytes = D::canonicalize(&D::serialize(&self.signed)?)?;
+        let canonical_bytes = D::canonicalize(&D::serialize(&self.metadata)?)?;
 
         let mut signatures_needed = threshold;
         for sig in &self.signatures {
@@ -481,6 +477,12 @@
     }
 }
 
+impl<D, M> AsRef<M> for SignedMetadata<D, M> {
+    fn as_ref(&self) -> &M {
+        &self.metadata
+    }
+}
+
 impl<D, M> Metadata for SignedMetadata<D, M>
 where
     D: Debug + PartialEq,
@@ -489,11 +491,11 @@
     const ROLE: Role = M::ROLE;
 
     fn version(&self) -> u32 {
-        self.signed.version()
+        self.metadata.version()
     }
 
     fn expires(&self) -> &DateTime<Utc> {
-        self.signed.expires()
+        self.metadata.expires()
     }
 }
 
diff --git a/src/tuf.rs b/src/tuf.rs
index cbd28c4..5a2cf68 100644
--- a/src/tuf.rs
+++ b/src/tuf.rs
@@ -48,7 +48,7 @@
     /// the related method `from_root_pinned`.
     pub fn from_root(signed_root: SignedMetadata<D, RootMetadata>) -> Result<Self> {
         {
-            let root = signed_root.signed();
+            let root = signed_root.as_ref();
             signed_root.verify(
                 root.root().threshold(),
                 root.keys().iter().filter_map(|(k, v)| {
@@ -71,6 +71,31 @@
     }
 
     /// An immutable reference to the root metadata.
+    pub fn root(&self) -> &RootMetadata {
+        self.root.as_ref()
+    }
+
+    /// An immutable reference to the optional snapshot metadata.
+    pub fn snapshot(&self) -> Option<&SnapshotMetadata> {
+        self.snapshot.as_ref().map(|t| t.as_ref())
+    }
+
+    /// An immutable reference to the optional targets metadata.
+    pub fn targets(&self) -> Option<&TargetsMetadata> {
+        self.targets.as_ref().map(|t| t.as_ref())
+    }
+
+    /// An immutable reference to the optional timestamp metadata.
+    pub fn timestamp(&self) -> Option<&TimestampMetadata> {
+        self.timestamp.as_ref().map(|t| t.as_ref())
+    }
+
+    /// An immutable reference to the delegated metadata.
+    pub fn delegations(&self) -> &HashMap<MetadataPath, SignedMetadata<D, TargetsMetadata>> {
+        &self.delegations
+    }
+
+    /// An immutable reference to the root metadata.
     pub fn signed_root(&self) -> &SignedMetadata<D, RootMetadata> {
         &self.root
     }
@@ -90,60 +115,35 @@
         self.timestamp.as_ref()
     }
 
-    /// An immutable reference to the root metadata.
-    pub fn root(&self) -> &RootMetadata {
-        self.root.signed()
-    }
-
-    /// An immutable reference to the optional snapshot metadata.
-    pub fn snapshot(&self) -> Option<&SnapshotMetadata> {
-        self.snapshot.as_ref().map(|t| t.signed())
-    }
-
-    /// An immutable reference to the optional targets metadata.
-    pub fn targets(&self) -> Option<&TargetsMetadata> {
-        self.targets.as_ref().map(|t| t.signed())
-    }
-
-    /// An immutable reference to the optional timestamp metadata.
-    pub fn timestamp(&self) -> Option<&TimestampMetadata> {
-        self.timestamp.as_ref().map(|t| t.signed())
-    }
-
-    /// An immutable reference to the delegated metadata.
-    pub fn delegations(&self) -> &HashMap<MetadataPath, SignedMetadata<D, TargetsMetadata>> {
-        &self.delegations
-    }
-
     fn current_timestamp_version(&self) -> u32 {
         self.timestamp.as_ref()
-            .map(|t| t.signed().version())
+            .map(|t| t.as_ref().version())
             .unwrap_or(0)
     }
 
     fn current_snapshot_version(&self) -> u32 {
         self.snapshot.as_ref()
-            .map(|t| t.signed().version())
+            .map(|t| t.as_ref().version())
             .unwrap_or(0)
     }
 
     fn current_targets_version(&self) -> u32 {
         self.targets.as_ref()
-            .map(|t| t.signed().version())
+            .map(|t| t.as_ref().version())
             .unwrap_or(0)
     }
 
     fn current_delegation_version(&self, role: &MetadataPath) -> u32 {
         self.delegations.get(role)
-            .map(|t| t.signed().version())
+            .map(|t| t.as_ref().version())
             .unwrap_or(0)
     }
 
     /// Verify and update the root metadata.
     pub fn update_root(&mut self, signed_root: SignedMetadata<D, RootMetadata>) -> Result<bool> {
         {
-            let old_root = self.root.signed();
-            let new_root = signed_root.signed();
+            let old_root = self.root.as_ref();
+            let new_root = signed_root.as_ref();
 
             // First, check that the new root was signed by the old root.
             signed_root.verify(
@@ -197,8 +197,8 @@
         signed_timestamp: SignedMetadata<D, TimestampMetadata>,
     ) -> Result<bool> {
         {
-            let root = self.root.signed();
-            let timestamp = signed_timestamp.signed();
+            let root = self.root.as_ref();
+            let timestamp = signed_timestamp.as_ref();
 
             // First, make sure the root signed the metadata.
             signed_timestamp.verify(
@@ -261,7 +261,7 @@
 
             signed_snapshot.verify(
                 root.snapshot().threshold(),
-                self.root.signed().keys().iter().filter_map(|(k, v)| {
+                self.root.as_ref().keys().iter().filter_map(|(k, v)| {
                     if root.snapshot().key_ids().contains(k) {
                         Some(v)
                     } else {
@@ -270,7 +270,7 @@
                 }),
             )?;
 
-            let snapshot = signed_snapshot.signed();
+            let snapshot = signed_snapshot.as_ref();
 
             if snapshot.version() != timestamp.snapshot().version() {
                 return Err(Error::VerificationFailure(format!(
@@ -285,8 +285,8 @@
             // regardless so we can prevent rollback attacks againsts targets/delegations.
         };
 
-        if self.targets.as_ref().map(|s| s.signed().version()).unwrap_or(0)
-            != signed_snapshot.signed()
+        if self.targets.as_ref().map(|s| s.as_ref().version()).unwrap_or(0)
+            != signed_snapshot.as_ref()
                 .meta()
                 .get(&MetadataPath::from_role(&Role::Targets))
                 .map(|m| m.version())
@@ -313,7 +313,7 @@
                     None => continue,
                 };
 
-                if delegation.signed().version() > definition.version() {
+                if delegation.as_ref().version() > definition.version() {
                     let _ = purge.insert(role.clone());
                     continue;
                 }
@@ -367,7 +367,7 @@
                 }),
             )?;
 
-            let targets = signed_targets.signed();
+            let targets = signed_targets.as_ref();
 
             if targets.version() != targets_description.version() {
                 return Err(Error::VerificationFailure(format!(
@@ -431,7 +431,7 @@
             }
 
             for delegated_targets in self.delegations.values() {
-                let parent = match delegated_targets.signed().delegations() {
+                let parent = match delegated_targets.as_ref().delegations() {
                     Some(d) => d,
                     None => &targets_delegations,
                 };
@@ -453,7 +453,7 @@
                 )?;
             }
 
-            let delegation = signed_delegation.signed();
+            let delegation = signed_delegation.as_ref();
             if delegation.version() != delegation_description.version() {
                 return Err(Error::VerificationFailure(format!(
                     "The snapshot metadata reported that the delegation {:?} should be at \
@@ -511,7 +511,7 @@
                 }
 
                 let targets = match tuf.delegations.get(delegation.role()) {
-                    Some(t) => t.signed(),
+                    Some(t) => t.as_ref(),
                     None => return (delegation.terminating(), None),
                 };
 
@@ -564,7 +564,7 @@
     }
 
     fn safe_root_ref(&self) -> Result<&RootMetadata> {
-        let root = self.root.signed();
+        let root = self.root.as_ref();
         if root.expires() <= &Utc::now() {
             return Err(Error::ExpiredMetadata(Role::Root));
         }
@@ -574,7 +574,7 @@
     fn safe_snapshot_ref(&self) -> Result<&SnapshotMetadata> {
         match self.snapshot {
             Some(ref snapshot) => {
-                let snapshot = snapshot.signed();
+                let snapshot = snapshot.as_ref();
                 if snapshot.expires() <= &Utc::now() {
                     return Err(Error::ExpiredMetadata(Role::Snapshot));
                 }
@@ -587,7 +587,7 @@
     fn safe_targets_ref(&self) -> Result<&TargetsMetadata> {
         match self.targets {
             Some(ref targets) => {
-                let targets = targets.signed();
+                let targets = targets.as_ref();
                 if targets.expires() <= &Utc::now() {
                     return Err(Error::ExpiredMetadata(Role::Targets));
                 }
@@ -599,7 +599,7 @@
     fn safe_timestamp_ref(&self) -> Result<&TimestampMetadata> {
         match self.timestamp {
             Some(ref timestamp) => {
-                let timestamp = timestamp.signed();
+                let timestamp = timestamp.as_ref();
                 if timestamp.expires() <= &Utc::now() {
                     return Err(Error::ExpiredMetadata(Role::Timestamp));
                 }