account-change: move create_account implementation to change-support.pm, rename to create_object
account-change: move update_account implementation to change-support.pm, rename to update_object
account-change: move delete_account implementation to change-support.pm, rename to delete_object
account-change: abstract away table_name, primary_key and primary_key_seq from change-support.
account-change: move get_account implementation to change-support.pm, rename to get_object
account-change: Rename all mentions of 'account' to 'object' in change-support.
account-change: Inline the required and optional fields into the generic object info.
Move change-support.pm to be Limesco::TemporalSupport so it can be used by other tools too.
Fixed TemporalSupport when the primary_key is not 'id'.
Added support to TemporalSupport for when the primary key must be given when creating the object (like with SIMs, whose primary key is the SIM ICCID) instead of generated by a sequence (like with accounts whose primary key is serial).
sim-change: Add tool to get, create, modify and delete SIMs in a similar fashion to accounts. Including test.
Temporal Support: allow giving a database handle instead of a Limesco object as the first parameter to these functions.

This allows callers with existing database handles in existing transactions to
use the functions without breaking the running transaction, while still
allowing the functions to be used by callers who don't have a database handle
yet.
invoice-generate: replace SIM "last invoiced" information updating hack with a call to the sim-change tool.

Previously, a SIM with a scheduled update after the invoice date would lead to
that SIM losing its "last invoiced" information on the date of the scheduled
update, because not all future rows where updated, only the current one. This
could cause the SIM to be invoiced multiple times for the same month. (This
hasn't happened, because we check our invoices by hand for sanity.) Now, in the
same situation, sim-change will call die(), preventing this from happening in
the first place. The full fix is implementing history changing support in
sim-change, but this is a more difficult problem that will be addressed later.