code: def build!(opts = {}, &block)
        @nbuild.Envelope(NAMESPACES) do |node|
          node.parent.namespace = parent_namespace(node)
          node.Header {
            set_version_header! opts[:server_version]
            set_impersonation! opts[:impersonation_type], opts[:impersonation_mail]
            set_time_zone_context_header! opts[:time_zone_context]
            yield(:header, self) if block_given?
          }
          node.Body {
            yield(:body, self) if block_given?
          }
        end
        @nbuild.doc
      end
docs: Build the SOAP envelope and yield this object so subelements can be built. Once
   you have the EwsBuilder object you can use the nbuild object like shown in the
   example for the Header section. The nbuild object is the underlying
   Nokogiri::XML::Builder object.
   @param [Hash] opts
   @option opts [String] :server_version The version string that should get
     set in the Header. See ExchangeWebService#initialize
   @option opts [Hash] :time_zone_context TimeZoneDefinition. Format: !{id: time_zone_identifier}
   @example
     xb = EwsBuilder.new
     xb.build! do |part, b|
       if(part == :header)
         b.nbuild.MyVar('blablabla')
       else
         b.folder_shape!({:base_shape => 'Default'})
       end
     end