Add nn_poll method

This implements the rust-safe version of nn_poll().  Because of
the way nn_poll operates, it is possible that an error flag is
set, so this commit also implements nn_errno().

There is already a NanoErr, which appears to be a very light
wrapper around the error number and an error string.  This
didn't feel very "rusty" to me, so I added an error enum
which matches the NanoMsg errors.  This allows pattern matching
on the the errors and makes for much cleaner syntax (I think).

The enum is currently called NanoError, which is confusingly
similar to NanoErr...it should probably be renamed

poll() accepts three parameters:

- send (bool): check if this socket can send a message
- receive (bool): check if this socket can receive a message (e.g.
a pending message is waiting)
- timeout (int): how long to wait before returning with an error

poll() returns a Result, containing either:

- (send, receive) = Ok((bool, bool))
- error = Err(NanoError)