USB support

Includes a few API changes to expose USB functionality to the user.
Implement Bluetooth protocol timeouts

Fixes the problem (which happens only with Bluetooth, not USB) where the
brick fails to respond when we talk to it too quickly.
def-nxt-command: Minor code simplifications
Macro refactoring: Add a CLOSy API to describe commands and parameters

Overview:

Encoding and decoding is done using class PARAMETER-INFO, which describes
each value in the protocol using its name, type (and, if required, special
configuration like the length of the data).

Class FRAME-INFO describes a protocol frame, i.e. a list of parameters,
with a function to compute the length from that, and functions to read
and write frames.

The named FRAME-PAIR instances describe request and reply in
combination.  Macros defining frames fill in the FRAME-PAIR object.
New explicit argument &key nxt to all protocol functions

Allows users to specify which NXT to connect to.  The default value for
this argument is still the implicit *nxt* setting, but users working with
multiple devices or threads can now avoid use of the special variable.

Example:
  (nxt:nxt-play-tone :nxt <some-other-nxt> :frequency #x500 :duration #x100)
Protocol data structure introspection

A few functions to information about protocol frames; e.g.
  (show-commands "input")
etc.
New argument &key onewayp to protocol functions

Users can now decide on a call-by-call basis whether to request replies
to commands.  (Command definitions should no longer include #x80 literally.)

For example, anyone working over bluetooth would be well-advised for
speed-reasons to specify :onewayp t whenever calling a function that
doesn't return anything useful anyway.

We still default to requesting replies though.

Example:
  (nxt:nxt-play-tone :onewayp t :frequency #x500 :duration #x100)
New argument &key check-status to protocol functions

Optionally checks the status returned by the brick.
  - NIL or unspecified means no check (the default).
  - T checks for :SUCCESS.
  - Any other value is matched exactly.

Not permissable for oneway commands.
Export FIND-FRAME-PAIR, PERFORM-COMMAND for low-level users

Also change FIND-FRAME-PAIR to (optionally) signal an error on misses.
New argument &key return-style to protocol functions

Default is :ALIST, giving the traditional behaviour.

Now :VALUES is also allowed, where the caller knows the order of
the fields and doesn't need an alist.  Often more convenient.
def-nxt-command: State the command-specific keys first in the arglist

Purely a cosmetic change for the benefit of slime's arglist display,
which would otherwise always start with the uninteresting arguments
shared by all commands.
encode-frame: Fix element-type to be (unsigned-byte 8)
Fix commands taking data size args to not ask the user for those

Fill in the size parameters corresponding to DATA fields automatically,
so that users do not have to (and cannot) pass them in manually.
Fix the ls-write command.

Remove the use of ADJUST-SIZE, which was misguided (I had misunderstood
the spec...).
Add support for MotorControl
Implement and use sbyte, sword, slong
Fix typos in status value keys
More MotorControl, in particular MOTOR-READY-P

Also wrapper functions STOP-MOTOR, QUERY-MOTOR to replace the low-level
GET/SET-OUTPUT-STATE using versions which respect the necessary delays.
Remove unneeded argument from %compute-bluetooth-timeout
Sensor support routines

Digital sensors supported:

- LEGO ultrasound
- HiTechnic angle sensor
- HiTechnic acceleration sensor
- HiTechnic compass

ENUMERATE-DIGITAL-SENSORS lists the attached I2C sensors.

Also a few minor helper functions for analog sensors:

- LEGO switch
- LEGO color