Steps to improve interop with functional languages

- Sequence Streams now extend Iterable<Optional<Sequence>> and
Iterator<Optional<Sequence>>
- Fasta Stream String reader still returns string with IOException
- Switched InvalidDnaFormatException to a RunTimeException, removing
checks on next / hasNext
- Switched functions that used to have a checked
InvalidDnaFormatException to instead return an Optional<Sequence>.
- These changes allow the readers to be treated as sequences in clojure,
and removes the blocking issue that throwing an exception as part of the
iterator breaks clojure sequence functions, such as map. Instead we can
now create the sequence of Optionals and filter based on isPresent().