Currently, the `OnEvictCallback` callback is called for [evictions](https://github.com/scalalang2/golang-fifo/blob/59489b85135694b0c1d0d43ea3f1f4de2038c0dd/s3fifo/s3fifo.go#L114) - as expected - but also for [expirations](https://github.com/scalalang2/golang-fifo/blob/59489b85135694b0c1d0d43ea3f1f4de2038c0dd/s3fifo/s3fifo.go#L259) (based on TTL) *and* [manual removals](https://github.com/scalalang2/golang-fifo/blob/59489b85135694b0c1d0d43ea3f1f4de2038c0dd/s3fifo/s3fifo.go#L153). Further, the current `OnEvictCallback` signature does not allow differentiate which of these cases happened. I propose making a breaking change and either: - adding separate callbacks - adding a "cause" parameter to `OnEvictCallback` Any of these seem acceptable? If yes, I'd cook up a PR.