Refactor wallet storage

Wallets are stored as a single key (wallet::id_name) containing all attributes as a serialized object. Closes #1267