Bump version.
Add 'RemotePtr' implementation.
Add 'Coupon' dummy module to experiment with the interface.
Check in partial conversion to 'Coupon' style that type checks.
Working 'Coupon' implementation. No garbage collection yet.
Refactor FFI. Hide 'ElementId' from functions that use the FFI.
Remove 'clear' function. Replace 'EmptyEl' message by an FFI call.
Update .cabal file.
Attach event handlers to elements so they can be garbage collected.
Use 'readMay' for compatibility with older base version used by Travis.
Refine license information. BSD3, but some files exempt.
First, conceptual part of the widget design guide 'doc/design-widget'.

(Note CC-BY-SA-3.0 license.)
Add 'Widget' class.
Attach 'Event' to elements so they can be garbage collected.
Remove dead code: 'readValue', 'readValues'.
Move 'Coupon' to 'Foreign.Coupon'. Rename 'RemoteBooth' to 'PrizeBooth' again.
Enforce usage of 'Foreign.Coupon.withItem'
Use 'IORef' as keys for weak pointers. Explicitely performing a garbage collection works as intended, though some issues remain.

In particular, elements not in the DOM tree are deleted from 'el_table' and elements that are in the DOM tree are not deleted. However, it looks like the debug statements are helping to keep some elements alive.
Remove possibility of returning 'elid' for elements that have not been created by the server. This affects 'getElementByTag', but is necessary to ensure that the server has full control over garbage collection.
Add function that creates a key/value weak pointer for IORefs. Garbage collection seems to work properly now.