WIP: refactoring to allow for disassembler plugins

reliable and accurate disassembly for arbitrary
architectures is hard to come by, so sefi should
make it as easy as possible to add in support for
a new disassembler library for any architecture

a disassembler library will be encapsulated by
the Disassembler class and the Instr class. these
classes will implement a generic interface needed
by sefi to find instruction sequences/gadgets.
finished initial draft of disassembler plugin refactorization
made InstSeq and Instr classes immutable

implemented __hash__ and __eq__ for InstSeq so that
it can be used in a set.

in cli: switched "result" array to a "result" set so that
duplicate gadgets can be eliminated automatically. also
now explicitly sorting gadgets by address when displaying
them.
change help description to match actual behaviour

cant ensure that backend plugins will be sophisticated enough
to equate something like pop %reg; jmp %reg to a ret
added disassemble function to cli (-d)
fix bug in elf_executable_data_by_symbol

when the for loop ends there may still be a symbol left to yield
if offset-soff > 0 so we need to check and yield if it exists.
add a line between each symbol disassembly
disassembly: use section name if symbol name empty
standardized type of self.data in Instr and InstrSeq to "tuple of integers"

the best way to maintain compatibility between python 2 'byte'
and python 3 'byte' is just to avoid them both >_<
added first draft of llvm disassembler plugin

not yet tested
catch broken pipe exception
moved llvm.py -> sefi_llvm.py and distorm.py -> sefi_distorm.py

need to have a prefix so that an import like 'import llvm' will
actually import the llvm library instead of just importing the
sefi llvm file.

also made some random fixes to sefi_llvm.py. the most important one
is that i added a BadLLVMInstr class to represent instructions which
llvm couldnt decode at all (as opposed to decoding the instruction
but recognizing it as bad in some way or invalid even though it has
a valid encoding)
print message when symbol cannot be found
elf name for arm is 'ARM' not 'arm'
added flag to specify preferred disassembler backend

also refactored code in disassembler module for more
elegant creation and lookup of supported backends