Convert class assignment to use the new signature.
Convert class assignment to use the new signature.

Make the implementation of class assignment explicit in ChapelBase.chpl.

The where clause "where isClassType(a)" is used in preference to the signature
  proc =(ref a:object, b:a.type)
to constrain 'a' to be of class type, because the latter causes the compiler to
insert a temporary so it can cast an LHS of class type (other than object) to
object.  It then complains that the LHS is not a legal lvalue (because it is a
temporary).

In addition, we really do want to constrain the RHS operand to be coercible to
the actual type of "a" rather than to "object".  Otherwise, any class object
can appear on the RHS, which may lead to absurdities.  For example,
  class C {}
  class D : C {}
  var c:C = new C();
  var d:D;
  d = c;  // Implies (dynamic) down-cast from base to derived type.
If assignment performs this cast implicitly (without emitting an explicit
dynamic cast), then statements following the assignment might access an object
that does not have the runtime type of D as if it were a D.  This in turn can
lead to invalid field accesses.


[tested on examples/ (std)]
[tested on / (no-local)]
[reviewed by bradc, vass]


git-svn-id: 88467cb1fb04b8a755be7e1ee1026be4190196ef@23160 3a8e244f-b0f2-452b-bcba-4c88e055c3ca

hildeth/chapel,chizarlicious/chapel,chizarlicious/chapel,sungeunchoi/chapel,sungeunchoi/chapel,hildeth/chapel,CoryMcCartan/chapel,hildeth/chapel,hildeth/chapel,chizarlicious/chapel,sungeunchoi/chapel,hildeth/chapel,sungeunchoi/chapel,chizarlicious/chapel,CoryMcCartan/chapel,chizarlicious/chapel,chizarlicious/chapel,CoryMcCartan/chapel,CoryMcCartan/chapel,CoryMcCartan/chapel,sungeunchoi/chapel,sungeunchoi/chapel,hildeth/chapel,hildeth/chapel,sungeunchoi/chapel,CoryMcCartan/chapel,chizarlicious/chapel,sungeunchoi/chapel,CoryMcCartan/chapel