[SPARK-2678][Core] Added "--" to prevent spark-submit from shadowing application options

JIRA issue: [SPARK-2678](https://issues.apache.org/jira/browse/SPARK-2678)

This PR aims to fix SPARK-2678 in a downward compatible way, and replaces PR #1699.

A new user application option passing style is introduced, now `spark-submit` can be used in two ways:

```bash
# The old, primary resource as positional argument style
spark-submit [options] <app jar | python file> [app options]

# The new, --primary and -- style
spark-submit [options] --primary <app jar | python file> -- [app options]
```

Before this change, `spark-submit` shadows application options share the same name with those recognized by `SparkSubmitArguments` (e.g. `--master`, `--help`, `-h`, `--conf` and `-c`, etc.), and empty string is not allowed:

```bash
# The "--help" option is captured by spark-submit
bin/spark-submit --class Foo userapp.jar --help

# The empty string is not passed to user program
bin/spark-submit --class Foo userapp.jar --some-arg ""
```

In the new style, all arguments that follow a `--` are passed to user application. 

```bash
# The "--help" option is now passed to userapp.jar
bin/spark-submit --class Foo --primary userapp.jar -- --help

# Empty string is also allowed
bin/spark-submit --class Foo --primary userapp.jar -- --arg ""
```

----

An unrelated change is that `bin/beeline` is made to delegate to `spark-class` to avoid duplicated `java` checking and classpath computing. At first It was supposed to use `spark-submit`, but then I realized Beeline is only a JDBC client, which is actually not related to `spark-submit`, using `spark-class` is enough.
and they only get here if they do `spark-submit --class Foo --hiveconf /some/path app.jar`. Then it's fine to leave this as is.