Use uint8_t for HardwareSerial ringbuffer pointers

Since the buffers aren't bigger than 64 bytes, these values can be
smaller. This saves a few bytes of ram, but also saves around 50 bytes
of program space, since the values can now be loaded using a single
instruction.

To prevent problems when people manually increase the buffer size, a
compile-time check is added.

Closes: #1078
Move buffers into HardwareSerial

This removes the need for doing an extra pointer dereference on every
access to the buffers, shrinking the code by around 100 bytes.

The members for these buffers must be public for now, since the
interrupt handlers also need to access them. These can later be made
private again.

Furthermore, the struct ring_buffer was removed. This allows the all
head and tail pointers to be put into the HardwareSerial struct before
the actual buffers, so the pointers all end up in the first 32 bytes of
the struct that can be accessed using a single instruction (ldd).

References: #947
Make private members of HardwareSerial protected

This allows users to create subclasses.

Closes: #947
Fixed compile problem for Leonardo after 0bd6a2d20fb9664255b20e0db11dd4586ebe9007
Applied HardwareSerial updates to robot's core.