Refactor SQL token storage
Split the access and refresh tokens into separate tables, mostly in order to improve code readability.
Fix an issue where we've been serializing the refresh token ID, not the whole refresh token struct, thus breaking repeated refreshes. Added a test to verify this scenario.