Fixes #2532810

The third argument to set (or _set) is not just for events.
Its purpose is to establish the reason for setting the attribute.
In Widgets, this usually means the source of the change by
indicating {src: 'UI'} (or its pre-defined constant).
Though it is usually used to avoid reflecting into the UI
what came from the UI, and is something done through events,
it is still useful even if you don't have a UI or events.

There are lots of reasons to change an attribute and,
even without events, there is still a reason for this 
argument to exist.  If it is passed to the setter or validator,
they can decide whether to accept or not a value.

It is like using _set for changes to read-only attributes,
using _set instead of set allows you to override the read-only.
In this case, passing the options argument to setter and 
validator, allows you a conditional setting based
in the value and the origin of it.

For example, the setter on an attribute might accept
and parse a string containing numbers when the source
is the UI because input boxes only return strings.
The same setter might reject values set from unspecified
sources if they are not real numeric.  Likewise,
it might accept 0 for false and 1 for true when the source
is a remote database while accepting only Booleans from
other sources.  When setting a date, the extra argument
might indicate the format the date string is in.

I have added those opts to both the setter and the validator
so they can decide on accepting or rejecting the value
based on the origin of the data.

I wonder if I should add the option to allow the third argument
to set to be a string and, in that case, make an object with the
"src" property set to that value.  Thus, these two would be the same:

o.set("attrA", true, "UI");
o.set("attrA", true, {src:"UI"}); 

------------------------------------
Provided an extra test to try the setter with the extra argument
This change should be fully backward compatible.
Changed the landing page.

Inadvertently I stripped trailing spaces on the changed sources,
which JSHint complained about anyway. I'll be happy
to deal with the other warnings from JSHint (mostly lines too long). 
My editor took care of the trailing spaces automatically, sorry
about that one.