Extracting Caching out to interfaced object.
Turning ChartCacheImpl into an actor.

This means it can receive file events messages and evict from the cache accordingly.
Switching to using cache weight for better memory management.

It makes more sense to evict at a certain number of charts, not a certain number of lists.
Replacing F.Either with Future, as both encode thrown exceptions.

Note that we're still blocking inside the actor thread on creation of the charts. (That's bad.)
Creating charts asynchronously (though controller actors still have to wait).
Removing DataSourceFactory as an authorization mechanism.
Enforcing access controls on charts.
Configuring higher chart cache size to avoid evicting on a single file.