Issue title: Missing stacking of q4/5/6 in NE10_len.neon.s causing stack corruption
 Issue body: Looking at:

https://github.com/projectNe10/Ne10/blob/master/modules/math/NE10_len.neon.s

... it looks like the function is failing to correctly preserve the contents of q4,5,6, so is effectively corrupting the stack. If I understand the NEON procedure call standard the expectation is that the callee is supposed to preserve q4-q7, d8-d15, and s16-s31, depending which aliases they are using.

Actually adding stacking to memory would seem inefficient, so I'd suggest just replacing all uses of q4/5/6 with q8/9/10 which do not need to be preserved in the procedure call standard.

 Comments: 
 Comment 0: See http://stackoverflow.com/questions/40227257/release-build-variable-corruption-when-using-ne10-math-library-assembly-function/ for the original report of this issue.

 Comment 1: I'm no NEON expert, but taking a look at the assembly it does indeed seem like you are correct -- this function violates the calling convention by not preserving Q4-Q7. This seems easy enough to fix here, but it would also be nice if assertions of invariants like these could be added to the project's test suite. (Who knows if this is the only occurrence of such violations within Ne10!)
{'source': 'GithubIssues', 'repo_name_with_owner': 'projectNe10/Ne10', 'issue_id': 184960956, 'repo_stars': 1305.0}