We record where in the input string an argument comes so we can report errors
against those string positions.
We publish a 'change' event when-ever the text changes
@param emitter Arguments use something else to pass on change events.
Currently this will be the creating Requisition. This prevents dependency
loops and prevents us from needing to merge listener lists.
@param text The string (trimmed) that contains the argument
@param start The position of the text in the original input string
@param end See start
@param prefix Knowledge of quotation marks and whitespace used prior to the
text in the input string allows us to re-generate the original input from
the arguments.
@param suffix Any quotation marks and whitespace used after the text.
Whitespace is normally placed in the prefix to the succeeding argument, but
can be used here when this is the last argument.
@constructor
function Argument(emitter, text, start, end, prefix, suffix) {
    this.emitter = emitter;
    this.setText(text);
    this.start = start;
    this.end = end;
    this.prefix = prefix;
    this.suffix = suffix;
}