search
trait Collection[A] {
def search[B >: A](e: B): SearchResult
def search[B >: A](e: B, i: Int, j: Int): SearchResult
}
search busca en la colección el primer elemento que es igual (==) al elemento e y devuelve un
Found conteniendo el índice donde se encontró.
Si e no puede ser encontrado en la colección entonces se devuelve un InsertionPoint conteniendo
el índice que ocuparía el elemento en caso de ser añadido a la colección.
Se puede restringir la búsqueda en el intervalo [i, j).