Merge pull request #34 from xeno-by/master

scala.reflect.core
Defn.Ctor
Ctor is not a Defn
Ctor.Secondary is a Stmt.Template
Merge pull request #35 from densh/master

Defn.Ctor
Type.Placeholder can have bounds
sketches logical groups of types

1) refs, 2) applications, 3) weirdos, 4) placeholders

The main goal of this separation is to figure out which ops are applicable
to which types. E.g. I don't think that it's a good idea to expose an
equivalent of typeSymbol/termSymbol for anything other than #1.

Placeholders are an effing mess btw. I already see how they are going to
bring us pain. However, let's deal with it one shtep at a time.
Type is now HasAnnots

This is done to decrease the number of type weirdos people have to think about.
I think it also might be useful to do the same for terms.
Tree is now HasAnnots

Continuing the trend set in the previous commit, I suggest we move annots
to the very root. Why?

Well, first, because people need uniform interface to metadata. When
saying uniform, I mean really uniform, not pattern matching into Annotated,
Annotated, Decl, Defn, or whatnot else.

Second, because we plan to allow attachments, and attachments can be slapped
onto arbitrary trees. Qed.
Param and TypeParam are now Trees (facepalm!)
develops the current annotation trend to its logical conclusion

Now that all trees have annots, we can significantly simplify handling
of annotations.

First, annotating a tree becomes really simple - we just get Tree.withAnnots
and get rid of all `val annots: List[Annots]` in former implementors of HasAnnots.

Second, since we now have withAnnots, we actually no longer need Tree.Annotated
and Type.Annotated, which is quite cool!