implement universally unique attributes to silo exposure logic

Here's my first stab at issue #52. It silos exposure logic by creating a universally unique attribute for each exposure.

It allows for stuff like this to work properly:

```ruby
expose :name, if: { greeting: :formal } do |obj, opts|
  "#{obj.title} #{obj.first_name} #{obj.last_name}"
end

expose :name, if: { greeting: :friendly } do |obj, opts|
  "#{obj.nick_name}"
end
```

This ended up requiring more tweaking than I expected. I also had to modify a number of specs that are accessing certain protected methods that now require a unique attribute (like `value_for`).

I added [specs to test applying "if" conditions to an attribute in separate exposure declarations](https://github.com/wyattisimo/grape-entity/blob/master/spec/grape_entity/entity_spec.rb#L23-L59), and all existing specs are currently passing, but there are likely some new use cases and/or side effects that need to be discussed/resolved.

**EDIT**

Just for clarification... using the above exposure declarations, grape-entity currently produces the following exposures hash:

```ruby
{
  name: {
    if: { greeting: :friendly },
    proc: #<Proc2>
  }
}
```

With this update, those same exposure declarations will result in an exposures hash like this:

```ruby
{
  name___939828ec686b4a6cb9f86ddbe38439a3: {
    if: { greeting: :formal },
    proc: #<Proc1>
  },
  name___b93f9ab39e4c4b67a6aa192cd7f49dbf: {
    if: { greeting: :friendly },
    proc: #<Proc2>
  }
}
```
For sanity sake we should organize these things into `spec/support`, so `spec/support/grape/entity.rb`.