docs: def discard_defaults(self, *args):
          '''
          node.discard_defaults(a, b...) yields a new calculation node identical to the given node
          except that the default values for the given afferent parameters named by the arguments a,
          b, etc. have been removed. In the new node that is returned, these parameters will be
          required.
          '''
          rms = set(arg for aa in args for arg in ([aa] if isinstance(aa, six.string_types) else aa))
          new_defaults = ps.pmap({k:v for (k,v) in six.iteritems(args) if k not in rms})
          new_cnode = copy.copy(self)
          object.__setattr__(new_cnode, 'defaults', new_defaults)
          return new_cnode