Cache partition list

At least one customer has a mysql database with many partitions which (for some unknown reason), takes a few seconds to answer the query listing the partitions. This caches the result of that query, and invalidates the cached value when the partitions are modified (assuming they are modified via these classes, rather than directly in the database).
I think this should call _listPartitions instead, and leave the cache clear during creation. Reads of the cache will then block on this method. You can also get rid of the other `this.partitionCache = null;` below that way.