Decouple l2cap and conn(gatt handling) with io.ReadWriteCloser

This is a stepstone for switching from c-him to go-hci.
We'll be back to rework this snippet to either conform the
io.ReadWriteCloser semantic or cook another interface
between L2CAP.
Move gatt handling code from server to conn

pure code movement
Migrate gatt handling code from server to conn
Move notifier from characteristic to conn
Move handles from l2cap to server
Move *conn related code from server to l2cap

pure code movement
Migrate *conn related code from server to l2cap
hci: initial import of hci sub-package
Migrate from c-shim to go-hci

The diff looks large, as the go-hci is not a pin-to-pin drop-in
replacement of the c-shim. However, the rewritten files are actually
pretty small.

We've been re-organzing and refacoring the code base to move c-shim
specific code to l2cap.go, or leave it in server.go. So right now
at this point, the changes of migration itself actually only involves
server.go and the separate advertser.go, which were extracted from
from the server.go.

Currently, the non-c-shim branch is working fine, but still need a
lot of re-working, refactoring, and layering.
Obsolete c-shim codebase