net: Add fast path in ARP lookups

This patch adds a fast path to arpresolve. A RCU protected ARP cache is
introduced to accelerate arpresolve lookup. A IPv4 address and llentry are
cached. If we hit the cache, no mutexes are taken and we go to the fast
path. If not, we go to the normal slow path. Most of the time will we
hit the fast path, in this case, in a single lookup,
IF_AFDATA_RLOCK(ifp), IF_AFDATA_RUNLOCK(ifp), LLE_RLOCK(lle),
LLE_RUNLOCK(lle) will be saved. Normally, the size of the cache should
be small, a linear list should be enough.

Currently, arpresolve returns a 'struct llentry* lle' which is used in
ether_output. We might hit use-after-free if we do not take the lle lock
in the fast path. However, in ether_output, lle is only used to check if
the lle contains LLE_IFADDR flag. To solve this issue, we return a
is_ifaddr flag instead of lle.

Fixes #300.

Signed-off-by: Asias He <asias@cloudius-systems.com>
ci