Generic Tree in Java
Your use of generics may be limiting. You may want to consider using the extends/super keywords to allow subtypes in the tree.
The Tree class should be final.
Perhaps TreeNode is a better name? Conceptually, it's a node, not a tree.
The children instance variable should be private. There's also no reason to use Collections.emptyList(). Just assign it to be a new ArrayList. You should really consider using a LinkedList, because you're not really doing random access on the list.
addChildren(List) should be addChildren(Collection). Sets need love, too. Whether the order is important or not should be left up to the client.
Your documentation for addChildren() and removeChildren() should make it clear that they modify the incoming children as a side effect.
It's not at all clear to me that it's desirable to return this from addChildren() and removeChildren(), but you certainly know more than I do about client needs.
setParent() needs to be private, or a client is going to change it manually and break your internals. Specifically, the node that used to be the parent will still have a reference to the node that just got its parent changed - you'll have two different one-way relationships, such that X's parent does not have X as its child.
getChildren() needs to return a (preferably immutable) copy of the children list, not the list itself. Otherwise a client can call removeAll() on the response and your internals are broken.
If you override equals(), you should also override hashCode(), or you may see strange behaviours, especially with collections. Are you sure you really need equals()?
The tree is thread-hostile. That is probably okay, given that this is most likely not production code, but it's something to be aware of.