Full persistence and expiration for tile cache

Complete rewrite of expiration-related code
TileBitmap and implementations: add timestamp and expiration timestamp
TileLayer and descendants: add isTileStale() method
FileSystemTileCache: store TileBitmap timestamp in file timestamp, check persistent cache in containsKey(), remove TTL/expiration-related code
TileDownloadLayer: add cache TTL and isTileStale() implementation
TileDownloader: set tile expiration timestamp if returned in HTTP header
DatabaseRenderer: set tile timestamp to map database timestamp
TileRendererLayer: add isTileStale() implementation
TileStoreLayer: add isTileStale() implementation

Signed-off-by: mvglasow <michael -at- vonglasow.com>