Ckozak/refresh pools memory

This is going to be a bit slower (except for huge orgs).

The goal is to keep less stuff (subscriptions, entitlements, pools) in memory for the duration of a refresh pools run.
breaking that down to holding ids rather than entire objects made it much easier to break the refresh into multiple commits.

Because we sync one subscription at a time, if we break half way though, we will end up better off than we would have by rolling the whole thing back.
I could have probably worded that better!
It doesn't fail if the uow is null, but it can't commit work in smaller transactions.

That works in our favor because we call refresher from places that aren't refresh pools job, so if we committed, it could potentially break a lot (by detaching db objects we have in memory)