foldLeft
trait Collection[A] {
  def foldLeft[B](z: B)(op: (B, A) => B): B
}
foldLeft aplica, da esquerda para a direita, o operador binário op para cada elemento e o resultado da anterior op.
A primeira vez que op é aplicada, ela é alimentada com o valor inicial z.
Em coleções vazias, essa função nem aplica op e o valor inicial z é retornado diretamente.