slow append queue
slow head queue
amortized constant time queue
private and auxiliary constructors
factory method in companion object
information hiding by using a trait