chunk allocator
queue
set removed queue items NULL
change queue to hold void * instead of uint8_t *
fixes a typo
Fixes a pointer arithmetic error.

A missing cast to uint8_t in chunkpool_release caused some funky pointer
arithmetic that fucked all sorts of shit up.
Merge branch 'master' into twi-rewrite
This splits MPC and the TWI driver.

There were three major goals
	(1) Split MPC and TWI (since phasor_comm should also be part of MPC
	(2) Allow buffers to be shared between all MPC components
		- This reduces the amount of memory required in separate static
		  buffers.  The 8 buffers used by MPC_TWI (RX and TX) are now
		  replaced by 8 total buffers, which will later be shared with
		  phasor_comm
	(3) Split the common parts of all of the communications code (uart,
	spi, twi) into a common packet-based communications layer. This is
	partially implemented, but needs a lot more work.

	In addition:

	- TWI now uses proper queues for RX and TX. At some point these
	  should block.
	- TWI does not process the RXed data; it simply queues it.
	- All of the MPC processing is moved to the MPC code, which will
	  allow it to be easily shared with phasor_comm
	- Instead of receiving MPC packets in the main loop, they are now
	  received in the MPC code and processed synchonously (should be
	  changed to a command pattern with lookup table)
comments
Changes chunkpool to maintain reference counts.

Rather than simply acquiring a or releasing a chunk,
the code now increments and decrements a reference count:
	 - chunkpool_acquire() sets refcnt to 1.
	 - any function that stores a reference to the chunk after
	 the function is out of scope (i.e. copies it to a static)
	 MUST increment the refcnt (unless it is the function that called
	 chunkpool_acquire())
	 - any time the refcnt is incremented (including chunkpool_acquire),
	 there must be a corresponding call to chunkpool_decref() after the
	 reference is on longer used.
	 - Example: function A() acquires a chunk and passes it to function
	   B(chunk). A() does not save any references to the chunk, but
	   before B() returns, B() copies the pointer to some static
	   location. B() must call chunkpool_incref(chunk). Since A()
	   created the chunk, A() must call chunkpool_decref() when it
	   returns.

The main use of this will be to facilitate creating a single packet to
transmit to multiple destinations. Each time a transmission finishes,
the refcnt is decremented; when they all finish, the refcnt is zero and
the chunk is considered free.
Being splitting twi into two layers

Splits the packet and low-level byte-oriented parts of twi out.
(to an extent). The queues, chunkpools  packets, etc all stay in comm.
All calls to twi go through comm. Still some neatening to do on the
interface. Eventually phasor_comm, display comm and xbee should all go
through the same comm interface.
Use macros to hide the interals of the comm struct.
Move new comm files to common include directory
removes an unused include
convert MPC command dispatching to a callback lookup table.
track a file that should have been added already

should have been added in d2d5b3a23c988551f5479d421aad10cecd16e5aa
pull in changes from master to fix compile errors
mpc: change add const to mpc_register_cmd
FUCK these compiler warnings.

I mean I'm all for warnings and catching shit early,
BUT SHUT THE FUCK UP.
use a counter instead of relying on NULL cb