Updated the way namespace definitions are updated. Changed CDATA
handling code.

+ Recursively descend into the XML hierarchy and update all namespace
  definitions on nodes along the way. This fixes an issue where nodes
  get reassigned a `ns0` namespace alias and `xmlns:ns0` namespace
  definition if its namespace is removed at a higher level in the
  document. Need to test this a lot more and make sure I didn't break
  a lot of stuff!
+ If a node contains a CDATA-wrapped text block, the entire text portion
  of the node will be wrapped in a CDATA block on output. This is an
  artifact of how lxml handles CDATA.