renamed, to be a little more consistent (i hope)
(...)
added todo
rewrote the layer-stack implementation

i was going to pull the functionality out into a "flex-array" type, and
use that, but it turned out not to generalize very well.  in the
process, i think i found a cleaner (and smaller) way to do what i was
already doing, so i rewrote the implementation.  i'm planning to rewrite
everything currently using linked-lists to use this type of dynamically
sized array, eventually, in order to save SRAM, but we'll see how that
goes.
(minor aesthetic)
added error checking and stopped implicitly converting -1
changed resize_stack() slightly
(minor: formatting)
(messing with error checking in resize_stack() again)
switched lib/eeprom from linked lists to dynamic arrays
fixed a simple bug; oops
lib/timer now using dynamic arrays instead of linked lists
finished removing linked lists from the project

the memory overhead of using malloc() is significant, as is the memory
overhead of having a next pointer in each node. dynamic arrays are not
overly difficult to implement, and it's my opinion at the moment that
they should be preferred.
(fixed a comment)
reorganized the keyboard layouts; made a template
changed the semantics of eeprom__copy()

the direction in which the data is copied is now well defined.  this
allows us to copy a large block a small distance (where the block's new
address range overlaps with its old one), in either direction (to a
higher block of addresses or a lower one), in a well defined and
documented manner.
changed recording interface for eeprom-macros's
(fixed small error; oops)
(working on lib/layout/eeprom-macro)
Create README.md