Correct errors in stream list

Encryption flag was missing for encrypted source.
Type was wrong for audio-only.
Caption example did not have captions.
Support relative path for encryption key
Support EXT-X-KEY:METHOD=NONE

Do not assume that METHOD=NONE is followed by an encryption key.
EXT-X-KEY:METHOD=NONE is a playlist attribute that means the content is not encrypted.
Normalize IV from protection header

The IV from the protection header may be less than 16 bytes long. In that case we pad it with leading zeros to make it 16 bytes. This makes the IV match the format that the decryption logic expects.

Tested with a stream using IV=1 (single byte)
http://playertest.longtailvideo.com/adaptive/oceans_aes/oceans_aes.m3u8
and some non-public local streams with 7 hex characters / 4 byte in key tag
Avoid using relative urls as cache keys

Key url may be relative and is therefore not guaranteed to be unique. This can lead to erroneous cache hits.
Use the resolved absolute key url as cache key instead.
Merge remote-tracking branch 'upstream/hls' into hls-sync
Correctly set minimum Android API requirement to 16, as code uses field introduced in version 16
Improved error logging

Simplifies debugging and extending the code
Report (unlikely) encoding exception
Fix Entry implements Comparable but not equals

Would result in errors if Entry objects are put in a (Sorted) Set.
Must implement hashCode() when implementing equals().
Both methods auto-generated by Android Studio.
Avoid comparing strings by reference value

String contents should be compared by contents.
The current code compared the object references instead and likely worked because of the JVM/Dalvik String cache.
Use isEmpty() for readability.
Merge pull request #37 from perchrh/hls-sync

Minor fixes and improved error handling