code: function(args) {
  		var named = gui.Type.isString(args[0]);
  		return {
  			name: named ? args[0] : null,
  			protos: args[named ? 1 : 0] || Object.create(null),
  			recurring: args[named ? 2 : 1] || Object.create(null),
  			statics: args[named ? 3 : 2] || Object.create(null)
  		};
  	}
docs: Break down class constructor arguments. We want to make the string (naming)
  argument optional, but we still want to keep is as first argument, so the
  other arguments must be identified by whether or not it's present.
  TODO: Something in gui.Arguments instead.
  @param {Arguments} args
  @returns {object}