always add argtypes/restype; add more tests

When we don't pass any arguments, we don't need to define them.
However, pypy would give:
RuntimeWarning: C function without declared arguments called
No such warning exists for undeclared return types.

As good coding practice we always define argtypes and restype now.

Also added DiscId initialization and free() tests.
We can't add reading, because there might not be a CD in the drive
while building/testing. There might not even be a drive.
We can test a bit more when we implemnt put().
create id property, make __get_id "private"

That is a deviation from the original API,
but so is not passing a pointer every time.