github.com/jsimonetti/rtnetlink provides a high level rtnl wrapper
around the lower level rtnetlink functions, which essentially does all
that we need. The rtnl.Conn.Neighbors uses an internal cache for
resolving interface indexes to names, so it makes at most one rtnetlink
call per interface to resolve the name.
Using this high level wrapper hugely simplifies our code and makes it
easier to understand and maintain.
Fixes: #3075
Signed-off-by: Daniel Swarbrick <daniel.swarbrick@gmail.com>