To answer the other half of your question (why does println(s.self) produce an error?), that is because self is not a field of SelfAware. It can be used to define such fields, however:
trait SelfAware { self =>
val me = self
}
class X
val x = new X with SelfAware
println(s.me)