mipmap: store cost in size_t

E.g. in scratchmem_allocate(void *data, const uint32_t key, size_t *cost, void **buf):

dt_mipmap_cache_one_t *c = (dt_mipmap_cache_one_t *)data;
*cost = c->buffer_size;

Where c->buffer_size is size_t already.
size_t is unsigned. add sub_cost and use it instead of "changing sign"