cached 0.51.3

Generic cache implementations and simplified function memoization
Documentation
# Contributing

Thanks for contributing!

## Getting Started

### Required software

- [Rust toolchain]https://www.rust-lang.org/en-US/install.html
- [`cargo-readme`]https://github.com/livioribeiro/cargo-readme (`cargo install
  cargo-readme`)
- [GNU Make]https://www.gnu.org/software/make/
- [Docker]https://www.docker.com/ or another Docker-compatible container
  engine
  - The docker command used by the Makefile can be specified with `DOCKER_COMMAND`, e.g.
    ```
    make DOCKER_COMMAND=containerd docker/redis
    ```

## Making Changes

- Before committing changes, make sure to run `make fmt` to format the changes
- Add an entry to the `CHANGELOG.md` file
- The `README.md` is generated using `cargo-readme` from the crate level
  documentation in `src/lib.rs`. This means the `README.md` should never be
  modified by hand. To sync changes made to `src/lib.rs`, run `make docs`
- The CI system will run all tests using `make ci`. Make sure to run all tests
  before submitting your pull request

## Make goals overview

```bash
# The goal used by the CI system
make ci
# Runs all examples
make examples
# Runs all tests
make tests
# Syncs all docs
make sync
# Formats the source code
make fmt
# Performs multiple checks (formatting, clippy and documentation sync)
make check
# Removes all generated artifacts, including docker containers
make clean
```

## Submitting Changes

Pull Requests should be made against master.
Travis CI will run the test suite on all PRs.
Remember to update the changelog!