DO NOT MERGE - Optional metadata.id in Invoice

REVIEW ONLY.

resolves #26
If invoice.metadata.id exists in the database, all subsequent invoice creation with the same ID returns
the previously created invoice instead of creating a new invoice.

TODO:
* Remove debug log statements.
* Extend the expiration time of a reused unpaid invoice to whatever is specified by the new invoice call.
* Pass metadata within the callback webhooks (like 'paid')