Setup string attributes in correct order

This prevents an uninitialized memory read because encoding setup checks
ascii_only and valid_encoding state.
Move ASM printer initialization into regular path

The new MCJIT infrastructure needs the setup this way, so we already do
it for now.
Don't add no capture attribute for return value

Index 0 indicates the return value and it makes no sense to mark that as
not captured by a function.
Untag passing specs
String#<=> should be called depending on the arg type
Merge pull request #2631 from anupnivargi/string_comparison

String#<=> should be called depending on the arg type